GTK1 2程式國際化步驟

2021-04-01 19:21:05 字數 3374 閱讀 4880

gtk1.2程式國際化步驟

有兩種方法

第一種:使用gettext軟體包

#include //gettext支援

#include //locale支援

然後是定義巨集,下面的定義形式在gnome/gtk+中應用的標準格式:

#define _(string)         gettext(string)

#define n_(string)        string

//以下函式用來設定國際化翻譯包所在位置

bindtextdomain(軟體包名,locale所在目錄);

如:bindtextdomain("hellogtk","/usr/share/locale/");

//以下函式用來設定國際化翻譯包名稱,省略了.mo

textdomain(軟體包名);

如:textdomain("hellogtk");

相關的字串修改

將**中需要國際化--即多語言輸出的字串改寫為_()巨集,**如下:

gtk_window_set_title (gtk_window(window), _("hello gtk!"));

……

label=gtk_label_new( _("enter a message:") );

……

button=gtk_button_new_with_label (_("print"));

生成相關檔案與翻譯

完成以上修改後,執行如下命令:

xgettext –a -o hellogtk.po hellogtk.c

它的功能是將hellogtk.c中的以下劃線開始括號中(如巨集定義所示)的字串加入到hellogtk.po檔案中。

修改hellogtk.po檔案

po檔案的頭部可以加入軟體包的名稱、版本、翻譯者的郵件位址等,po檔案中以#開始的行為注釋內容,以下為省略了頭部的hellogtk.po檔案內容,msgid後面的內容為英文,msgstr後面的內容為翻譯的中文,翻譯好後儲存為utf8格式。

注:系統i18n最好改為zh_cn.gb2312,不然翻譯的msgstr會存不上。

vi hellogtk.po

"content-type: text/plain; charset=charset/n"

"content-type: text/plain; charset=zh_cn.gb2312/n"

#: hellogtk.c:45

msgid "hello gtk!"

msgstr "你好 gtk!"

#: hellogtk.c:54

msgid "enter a message:"

msgstr "輸入乙個資訊:"

#: hellogtk.c:64

msgid "print"

msgstr "列印"

msgfmt -o hellogtk.mo hellogtk.po

cp hellogtk.mo /usr/share/locale/zh_cn.gb2312/lc_message

gcc hellogtk.c –o hellogtk `gtk-config --cflags --libs`

./hellogtk

將 hello.po檔案格式化為hello.mo檔案,這樣程式在執行時就能根據當前locale的設定來正確讀取mo檔案中的資料,從而顯示相關語言的資訊了。關於.mo檔案的位置,在redhat中預設的目錄是/usr/share/locale。將此步驟生成的mo檔案複製到該的目錄下,將locale設為zh_cn.gb2312,執行此程式,測試結果就變為中文了,如locale設為英文則顯示仍為英文資訊。

附錄:源**

/*hellogtk.c*/

#include

#include

#include

#include

#define _(string)  gettext(string)

#define n_(string)  (string)

static gtkwidget *entry;

void printandexit (gtkwidget *widget,gtkwidget *window)

void printbyeandexit (gtkwidget *widget,gpointer data)

int    main( int argc,char *argv[ ] )

gtk/gnome 系列widgets中, 輸入和顯示已經是國際化了的. 所以用它們編寫中文軟體十分容易. 把西文軟體改寫成中文軟體也十分容易.

·         在程式中包含 locale.h

·         在gtk_init前設定locale: gtk_set_locale()

·         接著呼叫gtk_rc_add_default_file("rcfilename"),其中rcfilename中含有預設的fontset

·         如果不用資源檔案, 則應對widget設定fontset

·         編譯 gcc `gtk-config --cflags` entry.c -o entry `gtk-config --libs`

·         把檔案gtkrc.zh 拷貝到當前目錄下

在gtk的text元件中如果設定了font,則不能正常顯示中文.解決的方法是把font釋放(unref), 然後使用 gtk_fontset_load 字型集. 對於其它元件也是如此, 有的元件需要先拷貝乙個 gtkstyle, 然後按上述方法解決.

下面的程式在顯示中文時未使用中文平台,輸入使用的是chinput中的xim協議支援,輸出結果:

//file entry.c

#include

#include

int main (int argc, char *argv)

>gcc entry.c -o entry `gtk-config --cflags --libs`

>./entry

IOS程式國際化

1.2 新建後,可以看到工作目錄結構檔案如下,單擊infoplist.strings,檢視右邊的屬性,在localization欄新增語言。1.3 新增完成後開啟對應語言檔案,比如english的新增 cfbundledisplayname china chinese檔案新增 cfbundledis...

IOS程式國際化

1.2 新建後,可以看到工作目錄結構檔案如下,單擊infoplist.strings,檢視右邊的屬性,在localization欄新增語言。1.3 新增完成後開啟對應語言檔案,比如english的新增 cfbundledisplayname china chinese檔案新增 cfbundledis...

QT程式國際化的過程

1.在所有需要採用雙語或多語的地方採用qobject tr 將要顯示的字串包起來。這裡的字串最好為英文,ascii的編碼在 都不會解碼錯。tr 的作用之一是從.qm檔案中取出與其所包含的內容對應的資訊。有些地方不宜採用tr 比如定義某些變數使用的字串,如 static const char stri...