Skip to Content

如何指定gettext使用的輸出字元集

achi's 的頭像

gettext不僅在訊息目錄理查找翻譯,它還即時轉換翻譯為想要的輸出字元集,如果用戶正在使用不同的字元集它會比建構訊息目錄的翻譯者有用,因為它可以避免不同訊息目錄的傳播,而這訊息目錄只是因字元集不同而已。

預設的輸出字元集是nl_langinfo的值(CODESET),這個值是目前語言環境的LC_CTYPE部份,但是用與語言環境無關方式(例如UTF-8)儲存字串的程式可以藉由bind_textdomain_codeset函式的使用請求gettext跟相關的函式用那個編碼傳回翻譯。

注意gettext的msgid參數並不取決於字元集的轉換,而是當gettext沒有找到msgid的翻譯時,它會不變地傳回msgid – 跟目前輸出的字元集無關,因此建議所有的msgids是US-ASCII字串。

— 函式: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會跟著設定。

Trackback URL for this post:

http://achi.idv.tw/trackback/2348