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
関数を使用して動的な文字列を生成することも可能です。