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
は、複数のソースファイルを検出して統合できます。 さらに、ディレクトリやファイル名に応じて使用するロケールを自動検出することもできます。
それでは、多言語対応の作業を始めてみましょう。 まずやってみたいことといえば、出力文字列を翻訳し、 翻訳結果をビューで表示することですね。 そうしないと、個々の言語ごとに別のビューを作らなければならなくなります。 誰もそんなことはしたくないでしょう。 一般に、多言語対応のサイトの設計は非常にシンプルです。 必要なのは、以下のたった 4 つの手順だけです。
-
使用するアダプタを決める
-
ビューを作成し、
Zend_Translate
をコードに組み込む -
コードから入力ファイルを作成する
-
入力ファイルを指定した言語に翻訳する
これ以降の節で、この手順について説明します。 次の何ページかを読めば、 あなたも多言語対応のウェブアプリケーションを作れるようになるでしょう。