C語言中用GNU gettext實現本地化

2021-06-18 01:09:09 字數 1541 閱讀 1647

首先要確認gnu gettext已經被安裝。

寫乙個示例程式

gettext_test.c:

#include

#include

#include

#define _(string) gettext(string)

intmain ()

下面先分析一下上面的原始檔

locale.h包含下面要呼叫的setlocale函式的宣告。

libintl.h包含gettext所使用的一些函式。

setlocale(lc_all, "");進行區域設定。(第二個引數為""說明設定成當前系統的區域)

bindtextdomain ("gettext_test","language");設定包含給定domain的語言檔案的基目錄。這裡domain設定為gettext_test,基目錄是當前目錄下的language目錄。

textdomain("gettext_test");設定當前程式的domain,要與bindtextdomain中的domain保持一致(這裡是"gettext_test")。

將所有要翻譯的字串寫成gettext("some string.")的形式,如程式中原來的printf ("helloworld!\n");要寫成printf (gettext ("helloworld!\n");根據gnu標準也可以使用_代替gettext,這樣可以少寫幾個字...

編譯原始檔生成gettext_test程式:

# gcc -o gettext_test gettext_test.c

生成翻譯檔案gettext_test.po:

# xgettext -k_ gettext_test.c

按照bindtextdomain 中引數,建立目錄結構:

在gettext_test當前目錄下建立language目錄,language目錄下建立你的語言目錄如:zh_cn、zh_tw等等,所有可以使用的名字參考setlocale的第二個引數。在所有的語言目錄下建立lc_messages目錄。下面建立目錄結構,假設你已經位於gettext_test的當前目錄下:

# mkdir -p language/zh_cn/lc_messages

# mkdir -p language/zh_tw/lc_messages

將gettext_test.po拷貝到所有語言目錄下:

# cp gettext_test.po language/zh_cn/lc_messages

# cp gettext_test.po language/zh_tw/lc_messages

編輯各個語言檔案*.po,具體如何翻譯,可以自己查閱資料,進行翻譯。

翻譯完成後生成*.mo檔案:

# msgfmt -o language/zh_cn/lc_messages/gettext_test.mogettext_test.po

# msgfmt -o language/zh_tw/lc_messages/gettext_test.mogettext_test.po

下面執行gettext_test,其中的hello world!\n已經顯示翻譯後的詞了!

關於c語言中用複數的問題

前段時間電腦啟動不了了,就重灌了個系統。一直很懶,所以到現在還沒裝matlab,學自動化的沒有matlab真的受不了,很多東西都不能寫。不過好在安裝了vs2010,有因為一直覺得程式語言得學好乙個,所以就複習複習c語言。至於之前雄心勃勃得想學會c qt,我覺得還是實在一些學學c語言吧。時域頻域的轉換...

C語言中用printf 函式輸出資料

f格式符。用來輸出實數 包括單 雙精度,長雙精度 以小數的形式輸出,有以下幾種用法 1.基本型,用 f。系統處理的一般方法是 實數中的整數部分全部輸出,小數部分輸出6位。栗子1 include intmain 結果為 2.指定資料寬度和小數字數,用 m.nf 含義為 指定輸出資料為m位,其中包含f位...

C語言中用bsearch 實現查詢操作

c語言中可以用bsearch 實現二分查詢。同qsort 一樣,bsearch 也包含在庫中,且同樣要自定義比較子函式。其原型如下 void bsearch const void key,const void base,size t nmem,size t size,int comp const v...