Linuxer.
全部博文(199)
分类: LINUX
2013-03-31 11:11:37
bindtextdomain()
参考:,功能是:设置包含 LC_MESSAGES 分类 (catalog) 的 locale 目录,程序的 .mo 文件就保存到其下的目录中。LC_MESSAGES 是 locale 的一个分类 (catalog),和其它的分类,如:LC_TIME、LC_CTYPE,是平级的概念。
bindtextdomain() 有两个参数,第一个叫 domainname,所谓 domain 即领域范围,它的含义是 .mo 文件将应用在哪个、哪些程序中,可以将 domain 对应为工程的概念,上面的示例工程叫 GetTextTest,所以将 domainname 也定义为 "GetTextTest"。第二个参数是定义保存 .mo 文件的 locale 相关目录的路径,可以为相对或绝对路径,示例中设置为 "locale/",表示检查当前目录下的 locale 目录.
domainname、locale 目录、程序当前活动 locale,这三者会决定你需要将 .mo 放到 locale 目录的具体位置,形式为:
[locale 目录]/[活动 locale]/LC_MESSAGES/[domainname].mo
比如,示例的 .mo 必需命名并保存为:
[GetTextTest 程序当前目录]/locale/zh_CN.GBK/LC_MESSAGES/GetTextTest.mo
textdomain()
参考:,功能是:设置后来使用 gettext() 时的 domain。示例中设置:textdomain("GetTextTest")。
gettext()
参考:, 功能是:替换程序中的 msgid 为 .mo 中的 msgstr,并返回 msgstr。示例中活动 locale 为 zh_CN.GBK 时,gettext("Hello World!") 将返回文件 locale/zh_CN.GBK/LC_MESSAGES/GetTextTest.mo 中对应的 GBK 编码的 msgstr,即 "你好,世界!"
如果不存在 locale/zh_CN.GBK,则会到 locale/zh_CN 中查找 .mo。