言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

gettext その2

http://d.hatena.ne.jp/propella/20061102/p1 に書いた物と重複しますが、管理上のメモです。まずサンプルの po ファイル ja.po を作ります。

msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Hello, world"
msgstr "こんにちは、世界"

誰かが更新した場合 po をマージ。最初の引数が手で翻訳したもの。二番目の引数はテンプレートか古い翻訳ファイル。

$ msgmerge ja.new.po ja.po -o ja.po

po から mo を作る。mo を作る前にドメイン名を決めます。というか、普通プログラムで決まっています。そして mo は ロケール名/LC_MESSAGES/ドメイン名.mo という名前で作成します。

$ mkdir -p ja/LC_MESSAGES
$ msgfmt ja.po -o ja/LC_MESSAGES/MyDomain.mo

確認の為、mo を再変換して中身を見てみます。

$ msgunfmt ja/LC_MESSAGES/MyDomain.mo -o -

プログラムでどう翻訳されるかテスト

$ env LANG=ja TEXTDOMAINDIR=. gettext -d MyDomain "Hello, world"