第31章 Zend_Translate

目次

31.1. 導入
31.1.1. 多言語対応をはじめよう
31.2. Zend_Translate のアダプタ
31.2.1. 使用するアダプタを決める方法
31.3. 翻訳アダプタの使用法
31.3.1. 翻訳ソースの構造
31.3.2. Array ソースファイルの作成
31.3.3. Gettext ソースファイルの作成
31.3.4. TMX ソースファイルの作成
31.3.5. CSV ソースファイルの作成
31.3.6. アダプタのオプション
31.3.7. 翻訳の確認

31.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 で使用することができます。

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

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

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

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

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

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

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