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...