第49章 Zend_Translate

目次

49.1. 導入
49.1.1. 多言語対応をはじめよう
49.2. Zend_Translate のアダプタ
49.2.1. 使用するアダプタを決める方法
49.2.1.1. Zend_Translate_Adapter_Array
49.2.1.2. Zend_Translate_Adapter_Csv
49.2.1.3. Zend_Translate_Adapter_Gettext
49.2.1.4. Zend_Translate_Adapter_Ini
49.2.1.5. Zend_Translate_Adapter_Tbx
49.2.1.6. Zend_Translate_Adapter_Tmx
49.2.1.7. Zend_Translate_Adapter_Qt
49.2.1.8. Zend_Translate_Adapter_Xliff
49.2.1.9. Zend_Translate_Adapter_XmlTm
49.2.2. 自作のアダプタの組み込み
49.2.3. 全アダプタの高速化
49.3. 翻訳アダプタの使用法
49.3.1. 翻訳ソースの構造
49.3.2. Array ソースファイルの作成
49.3.3. Gettext ソースファイルの作成
49.3.4. TMX ソースファイルの作成
49.3.5. CSV ソースファイルの作成
49.3.6. INI ソースファイルの作成
49.3.7. アダプタのオプション
49.3.8. 言語の処理
49.3.8.1. 言語の自動処理
49.3.9. 自動的なソースの検出
49.3.9.1. ディレクトリ名からの言語の取得
49.3.9.2. ファイル名からの言語の取得
49.3.9.2.1. ファイル名全体
49.3.9.2.2. ファイルの拡張子
49.3.9.2.3. ファイル名の一部
49.3.10. 翻訳の確認
49.3.11. ソースデータへのアクセス
49.4. Migrating from previous versions
49.4.1. Migrating from 1.6 to 1.7 or newer
49.4.1.1. Setting languages

49.1. 導入

Zend_Translate は、Zend Framework で多言語対応のアプリケーションを作成するためのパッケージです。

多言語対応のアプリケーションでは、コンテンツをさまざまな言語に翻訳し、 それをユーザの言語に応じて表示しなければなりません。 PHP にはすでにそのような場合のための手法が用意されています。 しかし、PHP の手法にはいくつかの問題があります。

  • 一貫性のない API: 入力フォーマットによって API が異なります。 たとえば gettext の使用法は非常に複雑です。

  • PHP は gettext およびネイティブの配列しかサポートしていない: PHP 自身は配列あるいは gettext しかサポートしていません。 その他の入力フォーマットは、手動で変換する必要があります。 ネイティブなサポートがないからです。

  • デフォルト言語の検出方法がない: ユーザのデフォルト言語を検出するには、 個々のブラウザについての深い知識を要します。

  • Gettext はスレッドセーフでない: PHP の gettext ライブラリはスレッドセーフではないので、 マルチスレッド環境で使用してはいけません。 これは gettext 自体の問題であって PHP のせいではありませんが、 問題であることには変わりありません。

Zend_Translate にはここであげたような問題はありません。 というわけで、PHP のネイティブ関数ではなく Zend_Translate を使用することを推奨します。 Zend_Translate の利点は、以下のとおりです。

  • 複数の入力フォーマットのサポート: Zend_Translate はいくつかの入力フォーマットに対応しています。 PHP でサポートしているもののほかに、TMX や CSV 形式のファイルにも対応しています。

  • スレッドセーフな gettext: Zend_Translate の gettext リーダーはスレッドセーフです。 マルチスレッド環境でも問題なく使用できます。

  • 簡単で汎用的な API: Zend_Translate の API は非常にシンプルで、使用する関数はほんの少しだけです。 そのため、容易に覚えることができ、保守も簡単です。 すべての入力フォーマットを同じように処理できます。 つまり、仮に入力ファイルが gettext から TMX に変わったとしても、 ストレージアダプタを指定している部分を一行変更するだけで対応できます。

  • ユーザの標準言語の検出: ユーザがサイトにアクセスする際の preferred language 設定を検出し、Zend_Translate で使用することができます。

  • 自動的なソースの検出: Zend_Translate は、複数のソースファイルを検出して統合することができます。 さらに、ディレクトリやファイル名に応じて使用するロケールを自動検出することもできます。

49.1.1. 多言語対応をはじめよう

それでは、多言語対応の作業を始めてみましょう。 まずやってみたいことといえば、出力文字列を翻訳し、 翻訳結果をビューで表示することですね。 そうしないと、個々の言語ごとに別のビューを作らなければならなくなります。 誰もそんなことはしたくないでしょう。 一般に、多言語対応のサイトの設計は非常にシンプルです。 必要なのは、以下のたった 4 つの手順だけです。

  1. 使用するアダプタを決める

  2. ビューを作成し、Zend_Translate をコードに組み込む

  3. コードから入力ファイルを作成する

  4. 入力ファイルを指定した言語に翻訳する

これ以降の節で、この手順について説明します。 次の何ページかを読めば、 あなたも多言語対応のウェブアプリケーションを作れるようになるでしょう。