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


11.2.4 gettextが使用する出力文字セットの指定方法

gettextは、メッセージカタログ内の翻訳を取得するだけでなく、オンザフライで翻訳出力の文字セットを変換することもできます。これは、翻訳者がメッセージカタログを作ったときとは異なる文字セットを使っているユーザーにとって便利です。これにより、文字セットだけが異なるメッセージカタログをいくつも作らなくてよくなるからです。

出力される文字セットのデフォルトはnl_langinfo (CODESET)です。これは現在のlocaleのLC_CTYPEの部分に依存します。文字列をlocaleとは関係のない文字セット(例: UTF-8)で保存するプログラムは、gettextや、それに関連するプログラムにたいして、そのエンコードで翻訳を戻すように要求することができます。これは、bind_textdomain_codeset関数により行います。

gettextの引数であるmsgidは、文字セットの変換の対象外であることに注意してください。gettextが、msgidに対応する翻訳を見つけられなかったときは、現在の出力の文字セットとは関係なく、元のmsgidが変更されずに出力されます。すべてのmsgidに US-ASCII 文字列が推奨されているのは、これが理由です。

Function: char * bind_textdomain_codeset (const char *domainname, const char *codeset)

関数bind_textdomain_codesetは、ドメインdomainname用のメッセージカタログの出力文字セットを指定するのに使用します。引数codesetには、関数iconv_openで使用できる有効なコードセット名、またはNULLポインターでなければなりません。

パラメーターcodesetがNULLポインターの場合、bind_textdomain_codesetは、ドメインdomainnameで現在選択されているコードセットを戻します。コードセットが選択されていないときは、NULLが戻されます。

bind_textdomain_codeset関数を複数回呼び出すこともあるでしょう。引数domainnameを変更せずに複数回呼び出したときは、それ以前に呼び出したときのセッティングによりオーバーライドされます。

bind_textdomain_codeset関数は、選択されたコードセットを結合した文字列へのポインターを戻します。その文字列は関数内部で割り当てられ、ユーザーは変更できません。bind_textdomain_codesetの実行中にシステムが割り当てに失敗すると、戻り値はNULLとなり、グローバル変数errnoに対応するエラーがセットされます。