TOP書籍連動> MOファイルの作成
Webアプリケーションの国際化
PHPコードを利用してWebアプリケーションを国際化する

第5回:Webアプリケーションをローカル化するgettext関数

著者:Carl McDade   2006/6/14
前のページ  1  2
MOファイルの作成

   誰かがPOファイルを翻訳した場合でも、その後、あなたはPOファイルをgettext()関数で理解可能なバイナリ・ファイルへ変換する必要が出てくるでしょう。そのためには次のコマンドを使います。
$ msgfmt messages.po

   上のコマンドを実行するとmessages.moファイルが生成されます。このファイルを適当なディレクトリに保存してください。

locale/<LANG_CODE>/LC_MESSAGES/ ng strings y.


複数形とngettext()関数

   特に複数形が必要とされるテキストがたくさんある場合には、複数形の処理は最も大変な課題となります。この場合、単純なgettext()関数ではなく、ngettext()関数を使用します。

<?php
$n = 3;
printf(ngettext("%d comment", "%d comments",
$n), $n);
?>


gettext()関数の利点

   国際化に際してgettext()関数を使う方法は、他の2つの方法ほど一般的ではありません。ほとんどのOSSプロジェクトでは、開発者は独自の翻訳ファイルを提供する義務があります。抽出スクリプトでこれが実行された後、ファイルはもう一度翻訳される必要があり、場合によっては翻訳者は前回行った翻訳と結合させる必要があります。

   翻訳者はエンド・ユーザやボランティアの可能性もありますし、他の開発チームのメンバーであるかもれません。gettext()関数のメンテナンスとサポートには、多くのリソースが必要となります。

   多数のボランティアが参加する大きなプロジェクトや、中堅企業にとっては、これはたいした問題にはならないかもしれません。しかし、1人のプログラマや小さなグループにとって、これは大きな障害となります。定義ファイルでgettext()関数を使用する場合でも、テキスト文字列を見つけてgettext()関数が使用できるフォーマットに変更していく処理を開発者が行わなくてはなりません。

   国際化のためにgettext()関数を使う最大の利点とは、開発者が変数に一意な名前を考える必要がないことでしょう。大きなアプリケーションでは、このテクニックは他のテクニックよりも遥かに有益となります。

   MySQL のバージョン4.1 では、とうとうユニコードがサポートされました。これにより、ユニコードのサポート(UTF-8)により、もっと洗練された国際化を実現できるようになりました。カラム、テーブル、データベースごとに異なる文字セットを設定することもできます。つまり、文字列をエンコードしデコードする複雑なコード・ルーチンを使うことなく、多くの言語データを保存することができます。また、ソート、検索、インデックス付けや、MySQL内の文字を扱う関数が正確に機能することにもなります。

前のページ  1  2

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Carl McDade
著者プロフィール
Carl McDade
スェーデンに住むフリーランスのWeb開発者、兼プログラマー。Microsoftデータベース管理者の資格を持っており、1997年からWeb開発を行っています。開発期間のほとんどをドキュメント作成、コード作成、PHPコンテンツ管理システムの勉強に費やしています。Webサイト(http://www.hivemindz.com)で彼とコンタクトをとることができます。


INDEX
第5回:Webアプリケーションをローカル化するgettext関数
  gettext関数
MOファイルの作成