第57章 Zend_Translate

目次

57.1. 導入
57.1.1. 多言語対応をはじめよう
57.2. Zend_Translate のアダプタ
57.2.1. 使用するアダプタを決める方法
57.2.1.1. Zend_Translate_Adapter_Array
57.2.1.2. Zend_Translate_Adapter_Csv
57.2.1.3. Zend_Translate_Adapter_Gettext
57.2.1.4. Zend_Translate_Adapter_Ini
57.2.1.5. Zend_Translate_Adapter_Tbx
57.2.1.6. Zend_Translate_Adapter_Tmx
57.2.1.7. Zend_Translate_Adapter_Qt
57.2.1.8. Zend_Translate_Adapter_Xliff
57.2.1.9. Zend_Translate_Adapter_XmlTm
57.2.2. 自作のアダプタの組み込み
57.2.3. 全アダプタの高速化
57.3. 翻訳アダプタの使用法
57.3.1. 翻訳ソースの構造
57.4. ソースファイルの作成
57.4.1. Array ソースファイルの作成
57.4.2. Gettext ソースファイルの作成
57.4.3. TMX ソースファイルの作成
57.4.4. CSV ソースファイルの作成
57.4.5. INI ソースファイルの作成
57.5. 翻訳用の追加機能
57.5.1. アダプタのオプション
57.5.2. 言語の処理
57.5.2.1. 言語の自動処理
57.5.3. 自動的なソースの検出
57.5.3.1. ディレクトリ名からの言語の取得
57.5.3.2. ファイル名からの言語の取得
57.5.3.2.1. ファイル名全体
57.5.3.2.2. ファイルの拡張子
57.5.3.2.3. ファイル名の一部
57.5.4. 翻訳の確認
57.5.5. 見つからなかった翻訳をログに記録する方法
57.5.6. ソースデータへのアクセス
57.6. Plural notations for Translation
57.6.1. Traditional plural translations
57.6.2. Modern plural translations
57.6.3. Plural source files
57.6.3.1. Array source with plural definitions
57.6.3.2. Csv source with plural definitions
57.6.3.3. Gettext source with plural definitions
57.7. 以前のバージョンからの移行
57.7.1. 1.6 から 1.7 以降への移行
57.7.1.1. 言語の設定

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

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

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

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

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

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

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

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

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

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