Gettext
出典: フリー百科事典『ウィキペディア(Wikipedia)』
gettextはGNU国際化ライブラリの構成要素の一つであり、多言語対応のソフトウェアを開発する際に用いられる。最新のバージョンは2005年10月現在で0.16である。
目次 |
[編集] gettextによるソフトウェア国際化
[編集] プログラマ
まず、GNU gettextが利用されるようソースコードの修正を行なう。これはほとんどのプログラミング言語において、ソースコード中の文字列がまずgettext関数へ渡されるよう、文字列をラップしていく作業となる。キータイプの手間を省くため gettextには通常 _ のエイリアスが付けられる。C言語では、
printf("My name is %s.\n", my_name);
を以下のように変更する:
printf(_("My name is %s.\n"), my_name);
C言語以外にも GNU gettextは以下の言語/シェルコマンドで実装されている: C++、Objective-C、Bourne Shell、Bash、Python、GNU CLISP、Emacs Lisp、librep、GNU Smalltalk、Java、GNU Awk、Pascal、wxWidgets (WxLocaleクラスによる)、YCP、Tcl、Perl、PHP、Pike。ほとんどの場合、使用方法はC言語の場合と同様である。
ソースコード修正後、xgettextコマンドを用いて翻訳可能な全ての文字列のリストを保持する .potファイル(「テンプレート」とも呼ばれる)を生成する。.potファイル中のエントリは以下のようになる:
#: src/name.c:36 msgid "My name is %s.\n" msgstr ""
[編集] 翻訳者
翻訳者はまず、上記のテンプレートを入力として、msginitコマンドにより、翻訳リソースファイル(.poファイル)の初期状態のものを生成し、それに対して翻訳作業を行っていく。日本語への翻訳作業を行なう場合であれば、
msginit --locale=ja --input=name.pot
を実行し、これにより ja.poファイルが生成される。ファイル内部のエントリは以下のようになる:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "My name is %s.\n"
翻訳者は手作業あるいは poEditのようなツールによりこれらを編集する。編集後は以下のようになる:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "私の名前は %sです。\n"
最終的に、.poファイルは msgfmtコマンドにより .moのバイナリファイルにコンパイルされ、この状態で、該当ソフトウェアパッケージの一部として配布されることになる。
[編集] ユーザ
UNIXライクなシステムにおけるユーザは、LANGUAGEの環境変数をセットすることで(.moファイル中に該当言語のリソースがありさえすれば)、アプリケーションにその言語による表示を行わせることができる。