Next: Contexts, Previous: Locating Catalogs, Up: gettext [Contents][Index]
gettext
が使用する出力文字セットの指定方法gettext
は、メッセージカタログ内の翻訳を取得するだけでなく、オンザフライで翻訳出力の文字セットを変換することもできます。これは、翻訳者がメッセージカタログを作ったときとは異なる文字セットを使っているユーザーにとって便利です。これにより、文字セットだけが異なるメッセージカタログをいくつも作らなくてよくなるからです。
出力される文字セットのデフォルトはnl_langinfo
(CODESET)
です。これは現在のlocaleのLC_CTYPE
の部分に依存します。文字列をlocaleとは関係のない文字セット(例:
UTF-8)で保存するプログラムは、gettext
や、それに関連するプログラムにたいして、そのエンコードで翻訳を戻すように要求することができます。これは、bind_textdomain_codeset
関数により行います。
gettext
の引数であるmsgidは、文字セットの変換の対象外であることに注意してください。gettext
が、msgidに対応する翻訳を見つけられなかったときは、現在の出力の文字セットとは関係なく、元のmsgidが変更されずに出力されます。すべてのmsgidに
US-ASCII 文字列が推奨されているのは、これが理由です。
関数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に対応するエラーがセットされます。