Next: , Previous: , Up: gettext   [Contents][Index]


11.2.1 インターフェース

インターフェースは最小限、a)文字列が由来するドメインの選択(すべてのプログラムが1つのドメインを使用するのは、構築と保守が難しいので、たとえ可能であったとしても合理的ではありません)、b)選択されたドメインの文字列へのアクセス、の機能をもたなければなりません。

これは主にgettextのインターフェースについての説明です。このインターフェースは、使用するドメインを与えなかった場合に、無条件に参照されるグローバルドメインをもっています。もちろん、このドメインはユーザーが選択することができます。

char *textdomain (const char *domain_name);

これにより、LC_MESSAGEカテゴリーにおける現在のグローバルドメインの状態を問い合わせたり変更することができます。引数はヌル終端された文字列で、ファイル名として使用できる文字でなければなりません。引数domain_nameNULLの場合、この関数は現在の値を戻します。値がセットされていなければ、デフォルトのドメイン名messagesが戻されます。textdomainの戻り値型はchar *となっていますが、それを変更することはできないことに注意してください。それと、ドメイン名が利用可能かのチェックは行われないことを知ることも重要です。ドメイン名が利用可能でない場合、それは翻訳が提供されていないという事実をあらわします。

textdomainでセットしたドメインは、以下の関数で使用されます

char *gettext (const char *msgid);

この関数は想像されるとおりの簡単な方法で使用されます。これにより、現在のドメインが利用可能な場合には、msgidにたいする翻訳文字列が戻されます。ドメインが利用可能でない場合には、引数自身が戻されます。引数にNULLが指定された場合の戻り値は未定義です。

1つ念頭においてもらいたいのは、使用するドメインを明示的に与えられなかった場合のことです。この場合には現在のドメインが使用されます。プログラム中で同じgettextを呼び出したとしても、実行の間にドメインが変更された場合には、異なるメッセージカタログが参照されることになります。

もっとも簡単なのは、国際化されたパッケージで普通に使うケースで、この場合は実行開始時に呼び出されるtextdomainにより、一意なドメイン名(通常はパッケージ名)がセットされます。以降のコードでは、翻訳が必要な文字列はすべてgettext関数により処理されます。これだけでパッケージがあなたの言語で話し出すのです。