- 论坛徽章:
- 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
现在开始最重要的中文化工作,即用 gettext 套件把程序中的字符串做成中文的。
1. 先 xgettext --keyword=_ hello.c -o hello.pot
以`_' 为关键词,找到要翻译的词语,生成一个 pot 文件
2. msginit -l zh_CN.UTF-8 -i hello.pot -o hello.po
根据 pot 文件生成 po 文件
3. 编辑 po 文件。有关第 2 步和第 3 步的详细情况,因为我的 Blog 里有明确的说明,请自己看吧,我不想费话了。
4. msgfmt hello.po -o hello.mo
在检查无误后就可以生成二进制的语言文件── mo 文件
5. 在此请注意看一下上面的源代码。正常情况下,应该把 mo 文件放入系统的 /usr/share/locale/LOCALE/LC_MESSAGES/ 目录下。其中 LOCALE 为你的系统 LOCALE,不知道的话可以用 locale 来看一下。
由于我的例子程序是 bindtextdomain("hello", "."),而我的 locale 为
zh_CN.UTF-8,因此我需要
(1)在当前程序目录下新建目录。
mkdir -p zh_CN/LC_MESSAGES
(2)将生成的 mo 文档放入该目录下
cp hello.mo ./zh_CN/LC_MESSAGES/
(3)运行 ./hello。现在出来的应该是中文!
如果想让它在 en_US.UTF-8 下也显示中文,那就这么做
(注意:当前环境还是在 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 玩一把英文环境下显示中文 :-)
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/37261/showart_1286584.html |
|