免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 809 | 回复: 0
打印 上一主题 下一主题

C 程序国际化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-29 20:13 |只看该作者 |倒序浏览
在 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   玩一把英文环境下显示中文 :-)


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/52621/showart_2062752.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP