摘抄整理:Freebsd“中文化”的支持

2009-05-13 07:39:56来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

说Freebsd“中文化”的支持,其实最根本的是Freebsd对“I18N”的支持,或者是“国际化”的支持:
以下文字部分大都引自http://www.openitpower.com/wenzhang/64/3387_1.html
1、“中文化”与locale
I18N 是 InternationalizatioN (国际化) 的缩写,第一个字 I 与最後一个字 N 之间有 18 的字母,故名。 I18N 并不是只有表面上将 X Window 「国际化」而已,它是基在最底层的 libc 上。 libc 必须要有 locale 的支援,才能向 I18N 起步。  
什麽是 locale? 简单说就是一组「地区语言」的资讯。它包括了 (详见 man setlocale):
LC_CTYPE: 字元定义  
LC_MESSAGES: 讯息显示  
LC_TIME: 时间显示格式  
LC_NUMERIC: 数字显示格式  
LC_MONETARY: 货币显示格式  
LC_COLLATE: 字母顺序与字串比较  
其中,与一般使用者最有关的,是 LC_CTYPE 与 LC_MESSAGES 。
LC_CTYPE 直接关到某些字元或内码在目前的 locale 下是否可打印、输出? 要如何转换? 对应到那一个字? .... 等等。
LC_MESSAGES 则关到软件的讯息输出是什麽样的语文。真正完整的 locale 支援,是当我们在 shell prompt 下,直接设好环境变数,则我们马上就能切换到那个语文了。例如:
bash: export LC_CTYPE=zh_CN.UTF-8
2、Xwindow对国际化的支持
X11R6 也有一个 locale 的目录,放在 /usr/X11R6/lib/X11/locale 里头,对于简体中文,存在4个locale

    zh_CN
    zh_CN.UTF-8
    zh_CN.gbk
    zh_CN.gb18030
那就是我们的 XLC Locale data。在「标准」的情况下, XLC Locale 必须架构在 libc locale 之上运作,它除了定义一些字元对应,最重要的是内码与字型的对应。以我们的 locale 为例,我们需要两种字型,一是“半形 (单位元)”,显示 ASCII 码用,另一是“全形 (双位元)”用来显示中文。举一个例子,像以下这一串字:  
这是一个 abcd .... 测试字串 string! OK!  
那些要用全形显示? 那些要用半形显示? 这必须靠 libc 的 LC_CTYPE 来判断。因此, LC_CTYPE 如果挂掉,可以说什么都没辄。
3、编写符合I18N的应用程序
设定locale,利用setlocale()函数,建议不要硬编码,根据系统中设定的locale进行设定。
讯息输出 (详见 info gettext):  
一般程序的信息输出,是经由 stdio.h 头文件中的函数,直接输出到 stdout 或 stderr, 而输出的内容是直接写死在程式代码中。这样的程式要做多国语言化会造成困扰,因为我们必须要修改原始码,将所有的信息字符串可以进行集中,并方便翻译成另一种语言。因此,我们必须透过 locale 的 LC_MESSAGES 来处理讯息输出。
其原理很简单,就是将程序中的所有信息抽离出来,为每一个 locale 分别做好一个信息档,当程式要输出讯息时,则透过 libc 的函式依目前的 locale 去正确的讯息档中抓取讯息。  
在此我用 GNU gettext 为例,简单说明其原理。在 /usr/share/locale 中,有各种 locale 的资料目录。而每个目录下,都会有一个 LC_MESSAGES 的目录,而这些目录就是用来放各别程式的讯息档。例如:  
   /usr/share/locale/ja/LC_MESSAGES/prog.mo           (日文)
   /usr/share/locale/zh_TW.Big5/LC_MESSAGES/prog.mo   (Big5)
其中在 ja/ 目录下的 prog.mo 就是 prog 这个程式的日文讯息,而 zh_TW.Big5/ 下的 prog.mo 就是 prog 这个程式的中文讯息。假设在还没加入 LC_MESSAGES 支援之前, prog.c 长得像这样:  

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD下宽字节与多字节互相转换的函数支持

下一篇:freeBSD+kde下安装小企鹅输入法: