曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4617|回复: 0
打印 上一主题 下一主题

bindtextdomain()/textdomain() -- 设置文本域目录及文本域文件

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-7-12 13:24:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
bindtextdomain() 和 textdomain() 函数声明如下:
[C++] 纯文本查看 复制代码
#include <libintl.h>
char * bindtextdomain (const char * domainname, const char * dirname);
char * textdomain (const char * domainname);

bindtextdomain() 用来设置文本域目录。所谓的文本域文件就是 mo 文件,mo 文件在开发多语言软件中会用到,比如正常打印 "hello world" 的英文,为了在中文环境中得到相应显示,我们将这句话翻译为“你好,世界”,然后将这句中文放在一个 mo 文件中,一般会将该文件放在 /usr/share/locale/zh_CN/LC_MESSAGES 中。基于性能方面的考虑,mo 文件一般会做为二进制文件。

一般这么使用该函数:
[C++] 纯文本查看 复制代码
#define LOCALEDIR "/usr/share/locale/"      /* 设置 mo 文件所在基目录(该目录下会有 zh_CN, zh_TW 等等这些目录) */
 #define PACKAGE "foonly"    /* 函数的第 1 个参数 domainname */
bindtextdomain (PACKAGE, LOCALEDIR);


接着,一般会再使用 textdomain() 函数设置需要使用的文本域 ( text domain )。这些文本域之前都是经过 bindtextdomain() 指定的,再经过  textdomain() 函数设置后,那么此后 gettext 库(及其中的相关函数)便能找到相应的 mo 文件并操作它们。

如果程序需要用到多个 mo 文件,那么需要使用 bindtextdomain() 函数多次,然后使用 textdomain() 来指定当前需要使用哪一个。

比如上面,我们用:
[C++] 纯文本查看 复制代码
#define LOCALEDIR "/usr/share/locale/"      //设置 mo 文件所在基目录(该目录下会有 zh_CN, zh_TW 等等这些目录)
 #define PACKAGE "foonly"    //函数的第 1 个参数 domainname
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);


关于多语言环境软件开发可参考:http://www.groad.net/bbs/read.php?tid-906.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 20:05 , Processed in 0.068632 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表