 |

|
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プログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。
発行:アシアル株式会社 価格:1,029円
ご購入はこちら http://www.asial.co.jp/magazine/
|
|

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