Linux 的中文化问题简介

作者按
底下这篇文章是我最近写程式的一点点心得,除了前段部讨论了;Linux;I18N;环境外;(已在;Linux;连线版贴出),後半部还加了一些有关;I18N;程式写作的简介 。我想这篇文章就发表在;CLDP;上,希望;CLDP;可以收录 。更希望这篇文章对有兴趣的朋友有帮助,让大家能早日进入;I18N;的世界;:-));

由於我所知很有限,所以文章中可能有很多错误,而关於;Xi18n;的部分,我也有很多因为没有去研究,故略过不提了 。因此,希望各位高手能多多给我批评与建议,或帮忙我将不足之处补齐,让这篇文章更完美 。;

在此先谢谢各位 。;

谢东翰;(Tung-Han;Hsieh);


--------------------------------------------------------------------------------

Linux;的中文化问题简介
一、前言:;
最近这个话题大家吵得有点厉害,大家都希望;Linux;能在中文方面有所进步,各家有各家的说法,莫衷一是 。由於我最近常与;CLE;的;group;有联,同时也正在写一些与中文相关的程式,因此我大略说一下「我们正在做什麽」,让大家参考 。;

我希望大家能将这篇文章当做技术性文章来读,不要再有情绪化的批评,必境我们要的是;solution,;情绪化的批评对我们实在没有帮助 。除此之外,我的观点可能有错,也可能过份乐观,也欢迎大家能就技术方面给予我指教 。;

二、;I18N;与;locale:;

要将;Linux;中文化,朝着标准走才是长远之计 。各位如果有见过近代商业版的;UNIX;就会晓得,它们「中文化」之彻底,令人惊叹,诸如中文选单、中文讯息;....;您能想像得到,或说只能在;Win95/98/NT;OS/2;....;等上头才见得到的;中文环境,它们都有 。然而,它们的中文并不是像目前;Linux;上常见到的那样,由一堆程式七拼八凑出来的,它们全部都是遵循一个标准:;I18N; 。;

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_TW.Big5;

有了;locale;的「协定」,使得任何地区的语文,只要在加入适当的;locale;data;之後,;libc;就能正确地处理它了,而我们的「中文」当然也不例外 。由於前人与;CLE;group;的努力,目前我们已有自己的;locale;data;了 。有安装;CLE;的朋友可以到;/usr/share/locale;下看看,;zh_TW.Big5;就是我们的;locale;data,;虽然还不够完整,但已能;work 。;

目前;Linux;对於;locale;的支援如何?;可以大概地说,西方语系差不多没问题了,但东方语系还有不少问题 。如果您的;Linux;系统是用;libc5;(例如;Slackware);的话,那差不多可以说支援得相当差,几乎只能靠「七拼八凑」的方法来有限度地使用中文 。如果是用;libc6;(glibc2);的话,那就有相当的;locale;支援了 。;

然而,目前大部分使用;glibc2;的系统都是;glibc-2.0.7,;这一版对东方语系的支援还不够好,特别是;LC_CTYPE;,它无法辨认、转换我们的;Big5;码,必须要等到;glibc-2.1;以後,才能完全解决这些问题 。但这并不是说使用;glibc-2.0.7;的广大使用者都没希望了,事实上有一个;libwcsmbs;的套件,它可以将;glibc;中有问题的部分取代掉,让我们的;LC_CTYPE;部分可以「几乎;90%;正确」地工作 。而这个套件就是目前;CLE;的标准之一,也是很重要的一个部分,虽然大家可能感受不到它的存在 。;

推荐阅读