SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

次のページ
翻訳アダプタの選択

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3355 2009/01/05 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング