Gettext

gettextとは



gettextは、国際化(i18n)と地域化(l10n)に対応するための重要なライブラリです。特に、様々な地域の言語に対応したソフトウェアを開発する際に、その威力を発揮します。gettextライブラリを用いることで、ソフトウェアの対話的メッセージを翻訳された各国の言語で表示することが容易になります。

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



gettextを使ったソフトウェアの国際化は、プログラマー、翻訳者、そしてユーザーの3者が関わるプロセスです。

プログラマーの作業



まず、プログラマーはgettextを利用するために、ソースコードの修正を行います。具体的には、ソースコード中の表示文字列をgettext関数でラップします。多くのプログラミング言語では、可読性やキー入力の手間を減らすため、`gettext`関数のエイリアスとして`_`が使われることが多いです。

例えば、C言語の場合、以下のように変更します。

c
printf("Hello, world!
");




c
printf(_("Hello, world!
"));


のように変更します。

gettextは、C言語以外にも、C++Objective-CBourne ShellBashPython、GNU CLISP、Emacs Lisp、librep、GNU Smalltalk、Java、GNU Awk、Pascal、wxWidgets (WxLocaleクラスを使用)、YCP、TclPerl、PHP、RubyPikeJavaScriptといった様々な言語や環境で利用できます。多くの場合、基本的な使い方は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 ホームページ

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。