CodeZine(コードジン)

特集ページ一覧

Zend Framework入門(14):
多言語対応サイトの作成- Zend_Translate(前編)-

Zend Frameworkによる実践的なPHPアプリケーション開発 14

  • LINEで送る
  • このエントリーをはてなブックマークに追加
目次

Zend_Translateオブジェクト生成(翻訳アダプタの生成)

 翻訳ソースを作成したら、次はZend_Translateオブジェクトを生成し、翻訳アダプタを読み込みましょう。

 以下はarrayアダプタを使用した場合の例です。

[リスト3]index.phpの一部
<?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コンストラクタ
Zend_Translate(string adapter, string/array data, string/Zend_Locale locale, array options)

 各引数については次のように指定します。

Zend_Translateコンストラクタ引数
引数 概要
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は各アダプタクラスごとに解釈され動作します。

Zend_Translateコンストラクタ引数
対象アダプタ オプション デフォルト値 概要
全アダプタ clear FALSE FALSE時は新しい翻訳データを既存のデータに追記、TRUE時は既存データを消去し新しい翻訳データを読み込み直す。
ignore . ファイル検索時に無視するプレフィックス。「.」は隠しフォルダ、隠しファイルのプレフィックス。
scan NULL NULL時はフォルダ構造のスキャンを実施しない(自動ソース検出時に必要となるオプション)。
disableNotices FALSE Zend_Framework1.7より使用可能。TRUE時はブラウザの指定する言語が、翻訳として存在しなかった場合のエラーを無視して、翻訳インデックスキーをそのまま表示させる。
csv delimiter ; 区切り文字。
length 0(無制限) 読み込み可能行。超えた分は読み捨てられる。
enclosure " 値を囲む文字。

(3)翻訳ソースの追加

 addTranslationメソッドを用いて、翻訳ソースを用意した言語の分だけ追加します。引数についてはZend_Translateコンストラクタと同様です。

[構文] addTranslationメソッド
Zend_Translate_Adapter::addTranslation(string/array data, string/Zend_Locale locale, array options)

翻訳された値の取得と表示

 ここまできたらZend_Translateオブジェクトから値を取得し、表示させるだけです。

[リスト4]index.phpの一部
//(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関数を使用して動的な文字列を生成することも可能です。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Zend Framework入門

もっと読む

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 森山 絵美 (モリヤマ エミ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5