Zend_Translateオブジェクト生成(翻訳アダプタの生成)
翻訳ソースを作成したら、次はZend_Translateオブジェクトを生成し、翻訳アダプタを読み込みましょう。
以下はarrayアダプタを使用した場合の例です。
<?php
// (1)Translate.phpの読み込み
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
// arrayの定義処理(省略)
// (2)Zend_Translateオブジェクトの生成
$translate = new Zend_Translate('array', $ja, 'ja');
// (3)翻訳ソースの追加
$translate->addTranslation($en, 'en');
$translate->addTranslation($fr, 'fr');
(1)Translate.phpの読み込み
registerAutoload()により必要なファイルを動的に呼び出します。今回はZend_Translateコンポーネントを使用するために必要なTranslate.phpが読み込まれます。
(2)Zend_Translateオブジェクトの生成
Zend_Translateオブジェクトを生成します。構文は次のとおりです。
Zend_Translate(string adapter, string/array data, string/Zend_Locale locale, array options)
各引数については次のように指定します。
| 引数 | 型 | 概要 |
| adapter | string | アダプタの種類を指定。Zend_Framework1.6.2では「array」「csv」「gettext」「ini」「gt」「tbx」「tmx」「xliff」「xmltm」が指定可能。Translate.phpを改造することでオリジナルのアダプタも指定可能。 |
| data | stringもしくはarray | 翻訳ソースを指定。arrayであれば変数名、翻訳ソースであればファイルパスを記載。 |
| locale | stringもしくはZend_Locale | オプション。翻訳ソースに対するロケールを記載。 |
| options | array | 種々オプションを指定(後述)。 |
data、locale、optionsはZend_Translateコンストラクタが呼び出す各種アダプタクラスの引数となります。optionsは各アダプタクラスごとに解釈され動作します。
| 対象アダプタ | オプション | デフォルト値 | 概要 |
| 全アダプタ | clear | FALSE | FALSE時は新しい翻訳データを既存のデータに追記、TRUE時は既存データを消去し新しい翻訳データを読み込み直す。 |
| ignore | . | ファイル検索時に無視するプレフィックス。「.」は隠しフォルダ、隠しファイルのプレフィックス。 | |
| scan | NULL | NULL時はフォルダ構造のスキャンを実施しない(自動ソース検出時に必要となるオプション)。 | |
| disableNotices | FALSE | Zend_Framework1.7より使用可能。TRUE時はブラウザの指定する言語が、翻訳として存在しなかった場合のエラーを無視して、翻訳インデックスキーをそのまま表示させる。 | |
| csv | delimiter | ; | 区切り文字。 |
| length | 0(無制限) | 読み込み可能行。超えた分は読み捨てられる。 | |
| enclosure | " | 値を囲む文字。 |
(3)翻訳ソースの追加
addTranslationメソッドを用いて、翻訳ソースを用意した言語の分だけ追加します。引数についてはZend_Translateコンストラクタと同様です。
Zend_Translate_Adapter::addTranslation(string/array data, string/Zend_Locale locale, array options)
翻訳された値の取得と表示
ここまできたらZend_Translateオブジェクトから値を取得し、表示させるだけです。
//(1)Localeの自動検出
$translate->setLocale('auto');
//(2)表示
print ("<html><head>");
print ("<title>".$translate->_('welcome')."</title>"); //インデックスwelcomeの値を取得、表示
print ("</head>");
print ("<body>");
printf ($translate->_('time'), date('H:i:s')); //インデックスtimeの値を取得、表示
print ("</body></html>");
(1)Localeの自動検出
setLocaleメソッドは引数にロケールを指定、つまりどの翻訳ソースを使用するかを指定できます。今回は動的にブラウザの環境に合わせて表示言語をかえたいため、「auto」を指定して、ブラウザに指定された言語環境を自動で検出させるようにします。
(2)表示
Zend_Translateオブジェクトから「_(インデックスキー)」で取得したい値を得ます。
timeの翻訳ソースにはプレイスホルダ「%1$s」が含まれていました。printf関数を使用して動的な文字列を生成することも可能です。
