给软件增加本地化(国际化)代码

 

软件本地化(国际化)步骤

增加本地化代码实例

#define LOCALE_DIR “/usr/share/locale”

#define LOCALE_DIR “”//如果设置当前目录

#define _(string) gettext(string)

int main()

{

setlocale(LC_ALL, ""); //配置地域化信息

bindtextdomain("test",LOCALE_DIR); //指定包里包含消息条目的目录(mo目录)

bind_textdomain_codeset("test","UTF-8")//指定域消息条目(mo)中消息的字符编码

textdomain("test"); //指定域名(test.mo)

printf(_("Hello world!/n"));//gettext函数,用于xgettext导出pot文件

...

}

#Makefile

src=test.c

exe=test

filename=test

CC = gcc

zh = zh_CN/LC_MESSAGES

LOCALE_DIR = /usr/share/locale

all:

$(CC) $(src) -o $(exe)

po:

xgettext --keyword=_ $(src) -o $(filename).pot

msginit -l zh_CN.UTF-8 -i $(filename).pot -o $(filename).po

mo:

msgfmt $(filename).po -o $(filename).mo


dir:

mkdir -p zh_CN/LC_MESSAGES


cp:

cp test.mo $(zh)

cp test.mo $(LOCALE_DIR)/$(zh)

#end Makefile


详细说明

函数setlocale()

原型: char* setlocale(const char* category, const char* locale);

内容说明

本函数用来配置地域的信息。参数 category 有下列的选择:

  • LC_ALL 包括下面的全项选项都要。

  • LC_COLLATE 配置字符串比较

  • LC_CTYPE 配置字符类别及转换

  • LC_MONETARY 配置金融货币

  • LC_NUMERIC 配置小数点后的位数。

  • LC_TIME 配置时间日期格式

而参数 locate 若是空字符串 "",则会使用系统环境变量的 locate 或是 LANG 的值。若 locate 为零,则不会改变地域化配置。返回新的地域,若系统尚未实现则返回 false


//===

函数 bindtextdomain()

原型: char * bindtextdomain (const char * domainname, const char * dirname);

函数功能:函数的作用是设置指定消息域(mo)里包含消息条目的位置。

bindtextdomain 告诉程序域 domainname 的文件是在 locale 目录下。所以 gettext 最终会选择从 locale/$LANG/LC_MESSAGES/helloworld.mo 文件中得到翻译的字符串。$LANG 是由 locale环境变量的值所决定。



//===

函数 bind_textdomain_codeset()

原型:bind_textdomain_codeset(const char* Domain,const char* encoding)

用法:bind_textdomain_codeset(“test”, “UTF-8”);

函数功能:指定域消息条目中消息的字符编码


//===

函数 textdomain()

原型:textdomain(const char* Domain);

用法:textdomain(“test”);

函数功能:textdomain 告诉程序要全局使用的 domain 名字叫 test。一个域实际上对应的是一个文件名。比如这里就是 test.mo 文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值