Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。4Translation2ソースコードにメッセージIDを埋め込むテンプレートPOファイル(メッセージカタログ)設定ファイルPOファイルの利用おわりに参考文献File_Gettext先に紹介したPHPの標準のGettextには、日本語の文字コードがWindows-31Jになるという問題がありました(Windows版PHPの場合)。PEARのFile_Gettextを利用すれば、この問題を回避できます。File_GettextはPOファイルを直接読めるので、先のMOファイルを作る手順は省略できるようになります。File_Gettextには、標準のGettextが利用できないような環境でも利用できるというメリットもあります。ソースコードにメッセージIDを埋め込むメッセージIDの埋め込み方は、先の例と同じです。_関数を再定義することはできないので、_2としておきます。該当部分だけ以下に示します。%s.'),$firstName,$lastName);?></p>テンプレートソースコードからメッセージIDを抜き出して、テンプレートを作成します(_2の部分がメッセージIDだということを指定しています)。messages2.potPOファイル(メッセージカタログ)ロケールごとにメッセージカタログを置くためのディレクトリを作り、テンプレートをコピーします。locale/en_US/LC_MESSAGES/messages2.po各POファイルを作成し、UTF-8で保存します。先に示した例と同様なので、ここには載せません。添付ファイルのlocale/ja/LC_MESSAGES/messages2.poとlocale/en_US/LC_MESSAGES/messages2.poを参照してください。POファイルの利用File_GettextでPOファイルを利用するためには、次のような準備が必要です(I18Nv2を利用した言語の設定については別稿を参照してください)。"./locale/$locale/LC_MESSAGES/$domain.po");$obj->load();$GLOBALS["messages"]=$obj->strings;メッセージIDを指定して、ロードしたデータからメッセージ文字列を取り出すための関数_2は次のようになります。メッセージ文字列が見つからない場合にはメッセージIDが返るようにしておきます(これは先に紹介した標準のGettextと同じ動作です)。$message;}全体をまとめた結果は、添付ファイル「trans2.php」を参照してください。ブラウザの言語設定で、日本語を最優先にすると日本語のメッセージ、英語を最優先にすると英語のメッセージが表示されます。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。