Freebsd下编写、编译我的第一个国际化例程

2009-05-13 07:42:57来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

FreeBSD下编译国际化程序:
标记:国际化程序编写,gettext函数,locale,po,mo
参照书本上的例子,我编写了一个最简单的国际化程序,目的是了解“国际化“程序编写、编译的整个过程。程序很简单,但是在实际编译过程中,通过解决遇到的一些问题。让我对“国际化”编程有了更深的认识。在Unix的世界里,实际操作很有必要。
我的程序:
               
               
                /* starter.c */
#include locale.h>
#include libintl.h>
#include stdio.h>
#include stdlib.h>
#define PACKAGE "starter"
#define LOCALEDIR "/usr/local/share/locale"
int main(int argc,char *argv[])
{
    setlocale(LC_ALL,"");
    bindtextdomain(PACKAGE,LOCALEDIR);
    textdomain(PACKAGE);
    printf("%s\n",gettext("This string will translate."));
}
这应该是最原始的利用gettext进行字符串输出程序了,在FreeBSD下,LOCALEDIR需要设置成程序中所定义的目录,当然这是“硬编码”,如果是要平台移植,最好的方法是通过环境变量获取LOCALEDIR,这样确保starter这个程序能够自动找到对应的starter.mo文件。
在这个程序里面,setlocale()是在“locale.h“中定义的,bindtextdomain()、textdomain()这两个函数定义在“libintl.h“中。
我的测试环境是 LC_ALL = zh_CN.UTF-8,shell是csh.
一、程序的编译:
在FreeBSD下,这个程序的编译我遇到了一些问题,如果只是简单的输入
# gcc -o starter starter.c
编译不通过,提示是找不到libintl.h这个文件。解决的办法是设置 “C_INCLUDE_PATH“这个环境变量
# setenv C_INCLUDE_PATH /usr/include:/usr/local/include
再次编译starter.c,编译还是不通过,提示是找不到libintl_bindtextdomain()等函数的定义,开始我以为还是要包含一些其他的头文件定义,通过在网络上查找,解决了这个问题,方法是:
# gcc -o starter starter.c -lintl
为了让Gcc能够找到这个intl库,还需要设置"LIBRARY_PATH”这个环境变量
# setenv LIBRARY_PATH /lib:/usr/lib:/usr/local/lib
程序编译到此通过,./starter 运行,可以输出英文字符串
二、创建新的starter.po文件
# xgettext -o starter.po starter.c
三、利用KBabel翻译starter.po文件
四、生成starter.mo文件


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12258/showart_275780.html

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:vsftpd的虚拟用户配置:PAM + PgSQL + FreeBSD-4

下一篇:虚拟机下安装openBSD (XP)