国际化编程
gettext軟件包
上面的程序運行是主窗口顯示為英文,我們完全可以將其改為中文,這樣單一的語言版本不適于應用的國際化,GTK+中用gettext軟件包來實現國際化,使這一問題變得非常簡單。gettext軟件包是GNU工程中解決國際化問題的重要工具,目前版本是0.11.x,支持C/C++和JAVA語言,它在開源界應用相當廣泛,GNOME/GTK+的國際化問題都是用它來解決的,正常的情況下GNU/LINUX系統是默認安裝這一軟件包的。
代碼實現
首先是在源代碼中加入相關的C語言頭文件如下:
#include <libintl.h> //gettext支持 #include <locale.h> //locale支持然后是定義宏,下面的定義形式在GNOME/GTK+中應用的標準格式:
#define PACKAGE "hello" //軟件包名 #define LOCALEDIR "./locale" //locale所在目錄 #define _(string) gettext(string) #define N_(string) string在程序的主函數中加入下面相關函數:
bindtextdomain(PACKAGE,LOCALEDIR);//以上函數用來設定國際化翻譯包所在位置textdomain(PACKAGE);//以上函數用來設定國際化翻譯包名稱,省略了.mo相關的字符串修改
將代碼中需要國際化--即多語言輸出的字符串改寫為_()宏,代碼如下:
gtk_window_set_title(GTK_WINDOW(window),_("Hello World!"));... ...button=gtk_button_new_with_label(_("Hello World!"));g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)(_("Hello, the Free World!"))); ... ...生成相關文件與翻譯
完成以上修改后,執行如下命令:xgettext -k_ -o hello.po hello.c,它的功能是將hello.c中的以下劃線開始括號中(如宏定義所示)的字符串加入到hello.po文件中。po文件的頭部可以加入軟件包的名稱、版本、翻譯者的郵件地址等,po文件中以#開始的行為注釋內容,以下為省略了頭部的hello.po文件內容,msgid后面的內容為英文,msgstr后面的內容為翻譯的中文,翻譯好后保存為UTF8格式。
#: hello.c:26 hello.c:29 msgid "Hello World!" msgstr "你好世界!" #: hello.c:31 msgid "Hello, the Free World!" msgstr "你好,自由的世界!"下一步執行命令:msgfmt -o hello.mo hello.po將 hello.po文件格式化為hello.mo文件,這樣程序在運行時就能根據當前locale的設定來正確讀取mo文件中的數據,從而顯示關語言的信息了。關于.mo文件的位置,本程序設在./locale目錄下的中文目錄zh_CN下的LC_MESSAGES目錄下,即./locale/zh_CN/LC_MESSAGES 目錄下,在REDHAT中默認的目錄是/usr/share/locale。將此步驟生成的mo文件復制到相應的目錄下,將locale設為簡體中文,再運行此程序,測試結果就變為中文了(如下圖),如locale設為英文則顯示仍為上面的英文信息。
轉載于:https://www.cnblogs.com/luiz/p/6830447.html
總結
- 上一篇: navicate使用小技巧
- 下一篇: webstorm最新版破解教程及汉化教程