SHOEISHA iD

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

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

PEARライブラリ活用

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

PEARライブラリ活用 (8)

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

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」を参照してください。ブラウザの言語設定で、日本語を最優先にすると日本語のメッセージ、英語を最優先にすると英語のメッセージが表示されます。

次のページ
Translation2

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
PEARライブラリ活用連載記事一覧

もっと読む

この記事の著者

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

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング