unoh.github.com

5分でわかる PHP で書かれた Web サービスの国際化

Wed Jun 07 18:46:32 -0700 2006

ジュンヤです。

I18Nって何のこと? に続き国際化の話。

Web サービスを日本以外で使ってもらうためには、あたりまえの話ですが、表示されているテキストを翻訳しなければなりません。表示されるテキストをコードに直接書いてしまうと、翻訳するときが大変です。たとえば、簡単な例ですが、

<?
echo "こんにちは";
?>


というファイルを英語に翻訳するとします。英語の翻訳者は英語に関してはプロ中のプロ、しかしプログラムのことは何もわからないとすると、

<?
echo Hello
?>


と修正しましたが、" や ; を削除してしまって、プログラムを壊してしまうかもしれません。

上記は極端な例で、プログラム自体が非常に簡単なので、間違いが起きることは考えにくいですが、何千行、何万行というコードを思い浮かべてもらえれば、そこに直接テキストが埋め込まれていれば翻訳が非常に難しいことは容易に想像できるでしょう。

そこで、プログラムのコードと表示するテキストは分けておくに限ります。それに、そうしておけば、簡単に他の言語の表示に切り替えることができます。

PHP でこれを実現するために、GNU gettext パッケージを利用した gettext 関数が用意されています。phpinfo() を実行してみて、Configure オプションに --with-gettext があれば使えます。

gettext を使えば、先ほどのプログラムのコードの部分は、

<?
echo gettext('Hello');
?>


で、テキストの部分は、別ファイルで用意し、日本語用は、

msgid "Hello"
msgstr "こんにちは!!"


英語用は、

msgid "Hello"
msgstr "Hello!!"


となります。gettext の引数がキーとなり、各言語用のファイル(メッセージファイル)の msgid に対応していて、表示されるのはその msgid に対応した msgstr の部分です。翻訳者は msgstr の部分だけを訳していけばよく、コード自体を触ることがないので、プログラムを壊してしまう危険性は減ります。

さわりでかなり基本的な話になってしまいましたが、次回は gettext についてもう少し詳しく書きたいと思います。