- 論壇徽章:
- 0
|
在 Linux 下寫了一個程序用于嘗試 i18n
#include stdio.h>
#include locale.h>
#include libintl.h>
#define _(string) gettext(string)
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "");
bindtextdomain("hello",".");
textdomain("hello");
printf(_("Hello world!\n"));
return 0;
}
gcc hello.c -o hello
現(xiàn)在開始最重要的中文化工作,即用 gettext 套件把程序中的字符串做成中文的。
1. 先 xgettext --keyword=_ hello.c -o hello.pot
以`_' 為關(guān)鍵詞,找到要翻譯的詞語,生成一個 pot 文件
2. msginit -l zh_CN.UTF-8 -i hello.pot -o hello.po
根據(jù) pot 文件生成 po 文件
3. 編輯 po 文件。有關(guān)第 2 步和第 3 步的詳細情況,因為我的 Blog 里有明確的說明,請自己看吧,我不想費話了。
4. msgfmt hello.po -o hello.mo
在檢查無誤后就可以生成二進制的語言文件── mo 文件
5. 在此請注意看一下上面的源代碼。正常情況下,應(yīng)該把 mo 文件放入系統(tǒng)的 /usr/share/locale/LOCALE/LC_MESSAGES/ 目錄下。其中 LOCALE 為你的系統(tǒng) LOCALE,不知道的話可以用 locale 來看一下。
由于我的例子程序是 bindtextdomain("hello", "."),而我的 locale 為
zh_CN.UTF-8,因此我需要
(1)在當(dāng)前程序目錄下新建目錄。
mkdir -p zh_CN/LC_MESSAGES
(2)將生成的 mo 文檔放入該目錄下
cp hello.mo ./zh_CN/LC_MESSAGES/
(3)運行 ./hello。現(xiàn)在出來的應(yīng)該是中文!
如果想讓它在 en_US.UTF-8 下也顯示中文,那就這么做
(注意:當(dāng)前環(huán)境還是在 zh_CN.UTF-8 下)
(1)mkdir -p en_US/LC_MESSAGES
(2)cp hello.mo ./en_US/LC_MESSAGES
(3)LANG=en_US.UTF-8 ./hello 玩一把英文環(huán)境下顯示中文 :-)
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u1/37261/showart_1286584.html |
|