注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

My Unix World

不要迷恋Unix,Unix只是计算世界很小的一部分!

 
 
 

日志

 
 

【Copy】GetText 的一般用法  

2009-01-08 13:55:08|  分类: L-D-Ex |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

假定你已经安装了GetText库,首先写一个“Hello,GetText”的C程序

#include <stdio.h>

int main(int argc, char **argv)
{
printf(”Hello,GetText!n”);
return 0;
}

我知道你肯定知道上面的代码会输出什么。

接下来开始使用gettext库,首先要加上要用到的locale.h和libintl.h两个头文件,#define _()是为了方便使用,如果不嫌打字麻烦并且看着不碍你的眼,那么你可以直接使用gettext()。然后在主函数的开始设置locale(设置为”"会 使用环境设置,关于setlocale的更多信息可以参见:http://www.cplusplus.com/reference/clibrary /clocale/setlocale.html)并绑定domain,修改以后的程序是下面这个样子:

#include <stdio.h>
#include <locale.h>
#include <libintl.h>

#define _(STRING) gettext(STRING)
#define PACKAGE “HelloGetText”

int main(int argc, char **argv)
{
setlocale(LC_ALL, “”);
bindtextdomain(PACKAGE, “locale”);
textdomain(PACKAGE);

printf(_(”Hello,GetText!n”));
return 0;
}

然后可以编译这个程序了,当然,编译前你需要将libintl.h和对应静态库文件所在的位置加入Search Directories,以便于编译和链接,而且你要把libintl.lib(GTK for Windows中是libintl.dll.a)加到链接文件中去。

编译链接成功后运行结果,不出意外的话应该显示:

Hello,GetText!

接下来肯定是要做国际化/本地化的工作了,首先我们要生成一个pot文件:

xgettext main.c -k_ -oHelloGetText.pot

使用选项-k_表示只搜索_关键字,如果你使用的是-a选项,那么任何没有使用_()包围的字符串也会被输出到pot中,更多选项参见 xgettext –help

然后针对某一语言生成po文件,以中文为例:

msginit -lzh_CN -iHelloGetText.pot

这条命令会生成zh_CN.po文件,用你喜欢的文本编辑器编辑这个文件,要翻译的字符串是msgid下面对应的msgstr,比如:

#: main.c:15
#, c-format
msgid “Hello,GetText!n”
msgstr “你好,GetText!n”

from:http://www.lodar.net/wordpress/?tag=gettext

当然,用PoEdit之类工具翻译会更方便,翻译完成之后我们需要将其编译为mo文件

msgfmt zh_CN.po -o zh_CN.mo

然后把mo文件复制到相应的LC_MESSAGE目录中,在复制前该目录需要存在,Unix-like的OS一般在/usr/share/locale/zh_CN/LC_MESSAGE/,命令如下(cp的-f选项覆盖现有文件):

cp -f zh_CN.mo /usr/share/locale/zh_CN/LC_MESSAGE/HelloGetText.mo

Windows中将目录更改为程序运行时当前工作目录的相对目录的.localezh_CNLC_MESSAGE,命令如下(copy的/y选项不提示覆盖现有文件):

copy /y zh_CN.mo localezh_CNLC_MESSAGEHelloGetText.mo

也可以在编译时就直接编译到对应目录,为防止目录不存在,先尝试创建目录,命令如下:

mkdir localezh_CNLC_MESSAGES
msgfmt zh_CN.po -o localezh_CNLC_MESSAGESHelloGetText.mo

然后再运行HelloGetText程序,如果你是中文的系统,便会显示“你好,GetText!”了。

  评论这张
 
阅读(672)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017