gettextとは
gettextは、国際化(i18n)と地域化(l10n)に対応するための重要な
ライブラリです。特に、様々な地域の
言語に対応したソフトウェアを開発する際に、その威力を発揮します。gettext
ライブラリを用いることで、ソフトウェアの対話的メッセージを翻訳された各国の
言語で表示することが容易になります。
gettextによるソフトウェア国際化の流れ
gettextを使ったソフトウェアの国際化は、プログラマー、翻訳者、そしてユーザーの3者が関わるプロセスです。
プログラマーの作業
まず、プログラマーはgettextを利用するために、ソースコードの修正を行います。具体的には、ソースコード中の表示文字列をgettext関数でラップします。多くのプログラミング
言語では、可読性やキー入力の手間を減らすため、`gettext`関数のエイリアスとして`_`が使われることが多いです。
例えば、
C言語の場合、以下のように変更します。
c
printf("Hello, world!
");
を
c
printf(_("Hello, world!
"));
のように変更します。
gettextは、
C言語以外にも、
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/main.c:123
msgid "Hello, world!
"
msgstr ""
文字列の直前にコメントを記述すると、そのコメントは翻訳者向けのヒントとして扱われます。
/ TRANSLATORS: This is the greeting message /
printf(_("Hello, world!
"));
`xgettext`は、このコメントを`.pot`テンプレートファイルに抽出します。
: src/main.c:123
TRANSLATORS: This is the greeting message
msgid "Hello, world!
"
msgstr ""
翻訳者の作業
翻訳者は、まず、`.pot`ファイルを基に`msginit`コマンドを使用して、翻訳リソースファイル(`.po`ファイル)を生成します。例えば、日本語への翻訳を行う場合は、
msginit -l ja -i template.pot
を実行して、`ja.po`ファイルを生成します。
`.po`ファイルのエントリーは次のようになります。
: src/main.c:123
TRANSLATORS: This is the greeting message
msgid "Hello, world!
"
msgstr ""
翻訳者は、このファイルを手動で、またはPoeditのようなツールを用いて編集し、翻訳文を追加します。
: src/main.c:123
TRANSLATORS: This is the greeting message
msgid "Hello, world!
"
msgstr "こんにちは、世界!
"
翻訳が完了した`.po`ファイルは、`msgfmt`コマンドによって`.mo`のバイナリファイルにコンパイルされ、ソフトウェアパッケージの一部として配布されます。
ユーザーの操作
UNIXライクなシステムを使用するユーザーは、
環境変数`LANG`にロケール`LANGUAGE`を設定することで、表示
言語を切り替えることができます。ここで`LANGUAGE`は、
IETF言語タグに基づいた値を使用します。
LANG=LANGUAGE
例えば、システムエンコーディングが
UTF-8で、日本語(ja)を話すユーザーの場合、`LANGUAGE`は`ja_JP.
UTF-8`となります(
IETF言語タグのハイフンはアンダースコアに置き換えます)。
LANG=ja_JP.
UTF-8
システムは、
環境変数から翻訳リソースを検索し(`.mo`ファイルに該当
言語のリソースが存在すれば)、アプリケーションはその
言語で表示されます。
まとめ
gettextは、ソフトウェアの
国際化と地域化を実現するための強力なツールです。プログラマーがソースコードを修正し、翻訳者が翻訳を行い、ユーザーが環境を設定することで、多
言語対応のソフトウェアが実現します。
関連項目
エラーメッセージ
外部リンク
GNU gettext ホームページ