Chinaunix首页 | 论坛 | 博客
  • 博客访问: 163947
  • 博文数量: 46
  • 博客积分: 2981
  • 博客等级: 少校
  • 技术积分: 475
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-01 12:43
文章分类

全部博文(46)

文章存档

2010年(4)

2009年(9)

2008年(33)

我的朋友

分类: LINUX

2009-09-29 20:13:56

在 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 文件。编辑时,注意设置字符集,如果设置不当会在msgfmt时候报错--无效的多字节序列。

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   玩一把英文环境下显示中文 :-)

阅读(994) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~