Gettext

gettextは国際化と地域化に対応するライブラリ構成要素の一つであり、様々な地域の言語に対応した地域化ソフトウェアを開発する際に用いられる。gettextライブラリを用いることで、ソフトウェアの対話的メッセージを翻訳された現地語にて容易に表示させることができる。

gettextによるソフトウェア国際化

プログラマ 
まず、gettextが利用されるようソースコードの修正を行なう。これはほとんどのプログラミング言語において、ソースコード中の文字列がまずgettext関数へ渡されるよう、文字列をラップしていく作業となる。読みやすさやキータイプの手間を省くため gettextには通常 _ のエイリアスが付けられる。C言語では、

printf("My name is %s.\n", my_name);

を以下のように変更する:

printf(_("My name is %s.\n"), my_name);

C言語以外にも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、Ruby、Pike、JavaScript。ほとんどの場合、使用方法はC言語の場合と同様である。

ソースコード修正後、xgettextコマンドを用いて翻訳可能な全ての文字列のリストを保持する .potファイル(「テンプレート」とも呼ばれる)を生成する。.potファイル中のエントリは以下のようになる：
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""
文字列の直前にコメントを置くと、ヘルパプログラムはコメントを翻訳者へのヒントとして扱う。

// TRANSLATORS: %s はそのままにして下さい。プログラムが変更します。
printf(_("My name is %s.\n"), my_name);

この例では、コメントは TRANSLATORS: で始まる。そして xgettext は .pot テンプレートファイルを作成する際に翻訳者のためにそのコメントを抽出する。
$ xgettext --add-comments=TRANSLATORS:

生成された .pot ファイルにはこのようなコメントが付く。
#. TRANSLATORS: %s はそのままにして下さい。プログラムが変更します。
#: 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 ""

翻訳者は手作業あるいは Poeditのようなツールによりこれらを編集する。編集後は以下のようになる：

#: src/name.c:36
msgid "My name is %s.\n"
msgstr "私の名前は %sです。\n"

最終的に、.poファイルは msgfmtコマンドにより .moのバイナリファイルにコンパイルされ、この状態で、該当ソフトウェアパッケージの一部として配布されることになる。

ユーザ 
UNIXライクなシステムにおけるユーザは、ロケールLANGUAGEを環境変数LANGにセットする。ここでLANGUAGEは、IETF言語タグに基づく値である。
 LANG=LANGUAGE 
例えばシステムのエンコーディングがUTF-8であり日本国 (JP) の日本語 (ja) を話すユーザの場合、LANGUAGEは（IETF言語タグのハイフォンをアンダースコアに置き換えて）ja_JP.UTF-8をとる。
 LANG=ja_JP.UTF-8
システムが環境変数より翻訳リソースを検索し（.moファイル中に該当言語のリソースがありさえすれば）、アプリケーションにその言語による表示を行わせることができる。

脚注

関連項目 

 エラーメッセージ

外部リンク 

 GNU gettextホームページ

ライブラリ (プログラミング)
オープンソースソフトウェア
国際化と地域化