Wednesday, December 31, 2008

什么是locale? 有什么作用?

使用gentoo就要多问几个为什么!
决定搞明白它!

之前只知道LC_*这堆环境变量的作用. 没有理会什么是locale.

什么是locale呢?

先看一下实体文件吧:

jessinio@nio-laptop ~ $ ls /usr/share/locale/zh_CN/LC_MESSAGES/
FvwmScript.mo cracklib.mo gtk20.mo sed.mo
FvwmTaskBar.mo findutils.mo libc.mo shadow.mo
GConf2.mo flex.mo libwnck.mo shared-mime-info.mo
Linux-PAM.mo fvwm.mo make.mo subversion.mo
atk10.mo gettext-runtime.mo nano.mo tar.mo
compiz.mo gettext-tools.mo popt.mo texinfo.mo
coreutils.mo glib20.mo scim-pinyin.mo wget.mo
cpio.mo gtk20-properties.mo scim.mo

一堆*.mo文件! *.mo和*.po文件就见得多了,i18n的产品!
先看一个*.po例子文件吧:

msgid "size not available"
msgstr "不被允许的大小"
msgid "Text%(sz)s"
msgstr "文本大小为 %(sz)s"

上面就是*.po文件的东西, 说白了:
*.po就是翻译对照表!!!!!
而*.mo就是*.po的二进制格式!! 从*.po文件生成*.mo可以使用msgfmt命令!

引用网上的一段话:

locale,说白了就是储存在glibc中的一些跟国家,地区有关的数据信息。比如说语言,货币,时间,输入法等等。在安装glibc的时候,它就会自动被安装在系统中。当程序需要的时候,它就会通过几个环境变量的设置,而选取不同的数据进行使用。这些数据被安装在 /usr/share/locale (X使用的被装在/usr/X11R6/lib/locale/)

在维基百科中可以看到如下信息:

These settings usually include the following display (output) format settings:

  • Display language setting
  • Number formats setting
  • Date/Time formats setting
  • Timezone setting
  • Daylight saving time (DST) setting
  • Currency formats setting

程序是怎么使用不用的locale的呢? 答案在于环境变量!

就是那一堆LC_*的变量

变量名 说明
LANG 一次性定义全部locale设置,但是允许通过下面的LC_*设置进一步作单项定制。
LC_COLLATE 定义字符串的字母排序方式。例如这会影响目录列表的分类显示。
LC_CTYPE 定义系统的字符处理性能。这决定哪些字符能被视为字母、数字,等等。这个变量如果生效还决定所使用的字符集。
LC_MESSAGES 使用基于消息机制的本地化方式的应用程序的本地化信息(绝大多数GNU程序皆属此类,请看下面的章节以获知如何让支持以及不支持此机制的程序本地化)。
LC_MONETARY 定义货币单位和货币型数值的格式。
LC_NUMERIC 定义非货币型数值的格式。影响到千位分隔符和小数分隔符等。
LC_TIME 定义日期和时间的格式。
LC_PAPER 定义默认的纸张尺寸。
LC_ALL 一个用于覆盖所有其它设置的特殊变量。

上面N多个变量都是定制本地信息的,其实常用的只有两个:
1. LC_CTYPE
这会影响到(X)程序对字符的处理, 比如scim, 如下是scim对此变量的使用说明:Set this variable if you do not want to change your UI language, scim可以使用三个环境变量
* LANG
* LC_ALL
* LC_CTPYE
前面两个都要影响到UI和字体, 第三个就是最好的选择了

2. LC_MESSAGES 这会影响到X程序的界面与它使用的字体

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.