支持HW团队,就支付宝领取下面的红包吧!(2018年3月31前,就几毛,也会几块,可以和其他红包叠加使用),你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!er1OEj73Uj

登入 注册 | 验证
| 搜索
HelloWorld论坛 : > 计算机科学、技术、教学> 编程专题> 开源免费项目> [转]给软件增加本地化(国际化)代码
 
 
 
 
 
 
类别:游戏 阅读:3859 评论:0 时间:五月 20, 2013, 10:02 p.m. 关键字:bindtextdomain bind_textdomain_codeset gettext textdomain 国际化

 

 来源:http://blog.csdn.net/gaoxuefeng/article/details/3340762
增加本地化代码实例

#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 文件

相关博文 首页 上页 1 2 3 下页 尾页 共3条
[挂载人]初学MPEG [审核人]初学MPEG 推荐

个人签名--------------------------------------------------------------------------------

Please Login (or Sign Up) to leave a comment