关于这几个环境变量
一般认为它们的作用是用来指定程序用户界面语言
而且这几个环境变量的优先级是从左到右依次降低的
大概的这么理解一下,也没什么太大问题
不过其实是不很准确的
它们是否起作用还和程序调用某些函数的方式有关
主要有这么一些函数:setlocale(), textdomain()/bindtextdomain(), gettext()/dgettext()/dcgettext()
详情如下:
Wait a sec, 如果对如何写国际化的程序尚不了解的话,还是先看看这个
http://xcin.linux.org.tw/i18n/pc2000/p5/index.html
首先,这几个环境变量并不能自动控制库函数(比如gettext)所使用的locale。也就是说设置了这些环境变量,程序的界面语言可能没有变化,虽然 这样的软件应该很少。所有的c语言程序默认的locale都是"C"。 setlocale可以改变库函数所用的locale。如果希望利用这些环境变量来设定库函数所使用的locale或者某个locale的 category,一定要用""作为setlocale的第二个参数来调用setlocale()。绝大多数软件都会这样做:
setlocale(LC_ALL, "");
如果不调用setlocale(),或者使用其他自己指定的合法locale字符串(比如“zh_CN.utf8")作为第二个参数调用setlocale,那么这些环境变量就一点用都没有。所以如果你正确设定了环境变量,但还是不起作用的话,不排除软件本身有问题。
其次,程序界面语言的字符串存于mo文件中。gettext被用来从mo文件中得到这些字符串。mo文件的绝对路径是这样的 DIR_NAME/LOCALE/LC_CATEGORY/DOMAIN_NAME.mo
gettext 需要依次确定这个路径的各个部分,才能找到正确的mo文件。其中LOCALE部分正是和语言相关的。要确定它,gettext将按照LANGUAGE, LC_ALL, LC_MESSAGES, LANG的顺序挨个检查这些环境变量(注意,可以这样理解,实际不是这样,可以看这个连接
http://spaces.msn.com/members/zhllg/Blog/cns!1pZICR9vxlDKAQZ1A4wqfIbw!824.entry 而且这里有个前提,就是程序的locale一定不能为“C”,也就是说一定要事先调用setlocale()),直到找到一个已经被设置的 为止,并用它的值代替上面路径中的LOCALE。其余几个部分,DIR_NAME一般是 “/usr/share/locale”,也可以由bindtextdomain()的第二个参数指定;LC_CATEGORY的值对于gettext ()来说默认是“LC_MESSAGES”,也可以由dcgettext()的第三个参数决定;DOMAIN_NAME初始值是”message“,可以 通过textdomain()或者bindtextdomain()的第一个参数指定,一般是程序名。
再次,LANGUAGE是glibc的扩展,其他的libc貌似是没有的,它可以是几个值,彼此之间用冒号分开,比如:zh_CN:zh:en_US:en
举个例子,一个典型的mo文件的路径是
/usr/share/locale/zh_CN/LC_MESSAGES/coreutils.mo
顾名思议,ls,cp,mv等程序的中文错误提示信息就来自这个文件
以上过程是决定程序输出语言的来源(mo文件),如果找不到,自然就是英文
还有一个重要的相关环境变量/locale category 是LC_CTYPE
LC_CTYPE决定用什么字符集打印出mo里的字符。要注意的是,同一种语言,不管用什么字符集,一个程序都只需要一个mo。比如 LC_CTYPE=zh_CN.gbk,程序按gbk字符集输出字符,如果LC_CTYPE=zh_CN.utf8,程序按utf8字符集输出字符
最后一点,其实这些信息`info libc`里都有
GNU的这些软件的info确实是好东西
不过说实话不是很user friendly
是reference,而不是tutorial
看起来会比较乏味
Anyway,既然搞这个,还是得会用它
LANGUAGE, LC_ALL, LC_MESSAGES, LANG(转贴)
原创
©著作权归作者所有:来自51CTO博客作者wx5ffd8ca34ea45的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
linux_locale的设定中LANG、LC_ALL、LANGUAGE环境变量的区别
F-8"
语言环境 优先级 应用程序 -
Centos: 解决系统编码 locale 的报错 LC_CTYPE / LC_ALL 问题
问题描述初装的系统,如果输入 locale 查看系统字体编码,可能会出现如下报错locale:
centos locale错误 centos locale locale错误 vim -
xcode测试ios性能
性能分析工具汇总 收藏 一、分析工具 1、CPU性能分析工具: vmstat ps sar time strace pstree top
xcode测试ios性能 操作系统 python php 文件系统 -
html5 实现列表的标签
列表就相当于去超市购物时的那个购物清单, 在HTML也可以创建列表,在网页中一共有三种列表: &nbs
html5 实现列表的标签 块元素 可选值 默认值