CodeZine(コードジン)

特集ページ一覧

Gettextによるウェブアプリケーションの国際化と地域化

PEARライブラリ活用 (8)

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

File_Gettext

 先に紹介したPHPの標準のGettextには、日本語の文字コードがWindows-31Jになるという問題がありました(Windows版PHPの場合)。PEARのFile_Gettextを利用すれば、この問題を回避できます。File_GettextはPOファイルを直接読めるので、先のMOファイルを作る手順は省略できるようになります。File_Gettextには、標準のGettextが利用できないような環境でも利用できるというメリットもあります。

ソースコードにメッセージIDを埋め込む

 メッセージIDの埋め込み方は、先の例と同じです。ただし、_関数を再定義することはできないので、_2としておきます。該当部分だけ以下に示します。

trans2.php

<title><?php echo _2('title') ?></title>
</head>
<body>
<p><?php
$firstName='Taro';
$lastName='YABUKI';
printf(_2('hi %s %s.'),$firstName,$lastName);
?></p>

テンプレート

 ソースコードからメッセージIDを抜き出して、テンプレートを作成します(_2の部分がメッセージIDだということを指定しています)。

xgettext -k"_2" trans2.php -o messages2.pot

POファイル(メッセージカタログ)

 ロケールごとにメッセージカタログを置くためのディレクトリを作り、テンプレートをコピーします。

mkdir -p locale/ja/LC_MESSAGES
mkdir -p locale/en_US/LC_MESSAGES

cp messages2.pot locale/ja/LC_MESSAGES/messages2.po
cp messages2.pot 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を利用した言語の設定については別稿を参照してください)。

trans2.php
//パッケージのロード
require_once "File/Gettext.php";
require_once 'I18Nv2/Negotiator.php';

//言語の設定
$i18n=new I18Nv2_Negotiator();
$locale=$i18n->getLocaleMatch();

//POファイルのロード
$domain='messages2';
$obj = File_Gettext::factory( "PO", "./locale/$locale/LC_MESSAGES/$domain.po");
$obj->load();
$GLOBALS["messages"]=$obj->strings;

 メッセージIDを指定して、ロードしたデータからメッセージ文字列を取り出すための関数_2は次のようになります。メッセージ文字列が見つからない場合にはメッセージIDが返るようにしておきます(これは先に紹介した標準のGettextと同じ動作です)。

trans2.php
function _2($message) {
	return isset($GLOBALS["messages"][$message]) ? $GLOBALS["messages"][$message] : $message;
}

 全体をまとめた結果は、添付ファイル「trans2.php」を参照してください。ブラウザの言語設定で、日本語を最優先にすると日本語のメッセージ、英語を最優先にすると英語のメッセージが表示されます。


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

バックナンバー

連載:PEARライブラリ活用

もっと読む

著者プロフィール

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、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