- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Linux下C语言的本地化/实现
中标普华李东东2010
在linux系统下,以c语言程序为例来实现程序的,即让程序根据Linux系统不同的语言环境
的不同来显示出对应该语言的文字,即先让c程序支际化然后再进行本地化翻译。
Linux上实现这个过程需要用到xgettext和msgfmt这两个工具。
Xgettext是的工具,用来提取程序中的字符串,生成*.po或是*.pot的文件,
msgfmt是本地化的工具,用来编译翻译后的.po文件为.mo文件,这样系统在启动时
候会扫描系统环境提取对字的.mo文件中的字符串替代原来的英文,实现本地化。
如我们来做一个简单的rpm包,包文件的目录树如下:
hello.c/*我们用来测试的c语言程序*/
po/zh_CN.po/*放在该包根目录下的po目录。对应于该程序进行的中文翻译*/
第一步、支际化的C程序(hello.c)如下:
一个支持本地化的C程序,需要用setlocale()来设定翻译选择的语言环境,一组或多组textdomain()和
bindtextdomain()函数来指定用到的翻译文件和该文件所在路径,其textdomain()函数用来指定翻译文件的名
字,而bindtextdomain()函数用来指定该名称的翻译文件所在路径(如果存在多组翻译文件和路径,则
textdomain()函数下面的待翻译语句对应查找该函数所指定的路径和名称)
1#includestdio.h
2#includelibintl.h//gettext库支持
3#includelocale.h//本地化locale的翻译支持
4
5#define_(STRING)gettext(STRING)//为了减少代码量和输入量,用别名_(STRING)替换gettext(STRING)
6#definePACKAGEhello//定义软件包的名字为hello
7#defineLOCALEDIR/usr/share/locale///定义系统语言环境的目录,该目录下存放各种的语言,不同系统
可能有差异。
8
9
10intmain(intargv,char*argc[])
11{
12setlocale(LC_ALL,);//设置locale为系统默认语言环境,gtk程序不需要,因为gtk_init()已经帮我们做了
13bindtextdomain(PACKAGE,LOCALEDIR);//关联包名称及其对应的翻译语言所在路径
14textdomain(PACKAGE);//定义.mo文件的名字,省略“.mo”后缀(可以多个路径下的不同mo文件)
15printf(_(Hello,World!\n));//字符串支持,结合上面的替换,实际应是:printf(gettext(Hello,
World!\n));
16printf(_(Thisisaexampleoflocalerpm@NeoshineDesktop5!\n));
17return0;
18}
关于不同路径下面的多个翻译文件
对于一个C语言程序允许对应于系统中不同位置的多个mo文件,用一组
bindtextdomain()和text
有哪些信誉好的足球投注网站
文档评论(0)