当前位置:Linux教程 - Linux文化 - 构筑稳健的中文Linux (下)

构筑稳健的中文Linux (下)


  Linux是操作系统中的一朵奇葩,是中国软件发展的机遇。要使这朵奇葩在中国的大地上生根、发芽,开花,要想抓住Linux机遇,首先必须解决中文本地化的问题。上期我们已经介绍了中文Linux采用中文平台及Linux国际化中的用双字节/多字节编码代替单字节7位或8位编码、使用统一的大字符集ISO 10646等知识的介绍。要建筑稳健的中文Linux,我们还要认识Linux的本地化及Linux核心的修改等重要问题。

  3. 本地化数据库Locale DB

  国际化的第三个内容是搞好本地化数据库Locale DB。

  语言、字符集、文化习俗等组成一个软件运行时的本地环境Locale。一个Locale是从本地化特征中提取的执行环境。它包括语言、地域、字符集。Locale的格式是ZH_CN.GBK,表示中文(zh)、中国(CN)、字符集(GBK)。

  Locale可以一组Shell环境变量LANG、LC_ALL、LC_CTYPE、LC_COLLATE、LC_TIME、LC_MONETORY、LC_NUMERIC、LC_MESSAGES进行设置,也可以通过C语言国际标准中提供的setlocale()函数在应用程序中查询和设置。用户可以在运行时设置整个Locale的全部和部分。

  Setlocale()函数为应用程序开发者提供了一种具有设置所有或部分(称之为类别)本地化环境的工具,setlocale()函数的语法为:

  Char *setlocale (category,locale)

  Int category;

  Char *locale;

  其中category是五个类别之一的名字,这些类别的名字是:

  LC_CTYPE(提供字符分类和大小写区分功能);

  LC_COLLATE(提供字符串比较和排序功能);

  LC_TIME(提供日期和时间表示格式,如中国是年、月、日,美国是 月/日/年,英国是日/月/年);

  LC_MONETARY(提供货币表示格式,如中国为阿拉伯数字后加RMB,在财务表格中为$后写阿拉伯数字);

  LC_NUMERIC(提供数字表示格式)。

  另外,用LC_ALL的特殊值使setlocale()函数设置所有的类别。

  Locale数据库中除了上述本地环境服务,还包括消息服务和代码集转换。

  4. 输入、输出服务(I/O服务)

  输入法可分为两大类,即模式识别类和编码类。模式识别类包括声音输入法、光学字符识别(optical character recognition,OCR)、手写体识别等输入法。编码类主要是基于拼音、笔划、部首等输入法。

  图形界面的国际化与中文本地化,具体包括:

  建立中文输入模块的摘挂方法和界面;

  建立各种点阵汉字库、矢量轮廓汉字库、曲线轮廓汉字库的摘挂方法和界面;

  建立基于图形界面的汉字信息处理函数。

  图形界面的国际化处理主要在三个层次上:

  X字型服务器层(X Font Server)提供处理点阵、矢量轮廓、曲线轮廓文字;

  库函数层(Libarries)、提供有关X字型服务器的函数,如把字体装入服务器、调入、查询、释放字型;

  命令层(Commands)包括工具类和转换类命令:

  图形界面中文本地化提供以下应用程序:汉字造字工具、汉字图标编辑器、汉字图文编辑工具、汉字图形打印工具。

  Linux关于输入的标准还是限于键盘输入。在X11R6中,有XIM(X InputMehtod)标准。XIM是在应用程序和输入法之间的通信协议,目前还没有字符终端的输入法标准。

  本地化
  本地化(localization,L10n,取首尾两个字母,中间有10个字母)是向特定本地语言操作环境的转换。

  本地化工作主要包括:代码体系国家特征文件和输入、输出服务的具体实现。

  1.代码体系指采用的字符集,我国目前是GB2312、GBK、GB18030和GB13000。

  2.国家特征文件指Locale中的本地环境内容。

  3.输入、输出服务与国际化中的输入、输出服务密切相关。

  输入方法按其功能可分为:输入管理层、前端处理层、输入单元层、输入单元算法层、辅助区处理层。

  输入管理层是根据Locale环境自动到指定目录下找出所需的输入方法模块、将其启动或装入应用程序,并填入有关入口表,以便建立应用程序与输入方法之间的联系。

  前端处理层是对各个输入单元进行管理、负责解释特殊键的含义,切换输入单元,并把输入单元处理的结果存于相应的缓冲区中,以保证应用程序取走、或调辅助区处理层函数显示。

  输入单元层是根据输入单元的要求,对每个输入键事件进行解释、确定相应的动作、形成符合输入单元要求的输入串,并调用输入单元算法层的函数进行字典查找或代码转换运算,把查找结果返回前端处理层。

  输入单元算法层是根据上层函数送来的输入码串进行字典查找运算,并把查找结果返回上一层函数。

  辅助区处理层用来提供输入方法的界面,即时状态区、预编辑区和造字区类处理函数进行相应的管理。

  三、修改Linux的核心,使其完全支持UCS。
  国际化就是为了解决本地化,它是由一个一个“本地化”组成的。本地化要遵循国际化,本地化完全遵循了国际化,本地化只需要解决输入法和增加字型了。本地化的标准组织应尽量把本地化所需的内容加入到国际化中,并尽量遵循国际化。做好本地化的工作,就是为了消除本地化。什么时候不需要再做本地化的工作了,那就说明本地化和国际化的工作做好了。

  ISO 10646是彻底解决“代码壁垒”软件“千年虫”的方法。彻底实行ISO 10646就意味着放弃目前各国的字符集标准,包括中国的GB、美国的ASCII。完全实现UCS,就是在操作系统、高级程序语言、支持软件、应用软件、通信协议、网络都UCS化,即都可以支持UCS。而且一些相关硬件设备如终端、打印机也要支持UCS,因为基本ASCII的硬件设备会把UCS中的一些码值当成控制字符。这时整个系统都是完全国际化了,那时的本地化工作只是提供输入法和扩充字型(Font)。要彻底实行ISO 10646,首先应从操作系统开始做起,对我国来说就是从Linux开始做起。

  UCS从1993年颁布至今已7年了,但进展不大。要完全国际化只能一步一步地走。第一步已制定了UCS,下一步就是在操作系统上完全支持UCS。然后各种软件、硬件都逐个完全支持UCS。因为操作系统是所有软件的基础。不动Linux核心,进行的国际化/本地化本质上仍是一个“中文平台”。因为它仍是按字节处理,是架构在操作系统之上的中文处理环境。只有在操作系统上实现按字符处理、支持宽字符,彻底抛弃ASCII和各种“国家标准”, 完全支持UCS ,才能彻底解决问题。中文平台的前途是不光明的,Windows上不就有过多种中文平台吗,后来都被微软的核心汉化彻底击败。

  我们以前搞中文平台,是因为我们没有自己的操作系统,也没有掌握源代码,是不得以而为之,是权宜、无奈之举。现在Linux给了我们一个机遇。Linux开放源代码,这给了中国软件业一个千载难逢的好机遇。Linux也要不断创新、不断发展。我们不能总是跟在洋人后面爬行,“打补丁”,无所作为。我们也要对Linux进行改进,展现中国人的聪明才智,对Linux做出自己的贡献。

  对Linux的改进主要有两个方面。一是针对Linux的安全漏洞进行改进。八月底在北京召开的Linux World大会上,中科院软件所副所长孙玉芳介绍说,中科院软件所和红旗公司针对Linux的安全漏洞已经进行改进,做了大量工作,并将于近期公布源代码。二是按UCS的要求改造Linux,使其完全支持UCS。对Linux在核心加以改造,以彻底支持UCS,是中文Linux的最终必须要走的道路,也是Linux的正确发展道路。如果Linux的核心不加以改造,以支持UCS,Linux也将会被经济全球化,软件国际化的潮流冲没。那时,彻底支持UCS的操作系统就将取代目前Linux的地位。所以彻底从核心改造Linux以支持UCS,也是有关Linux沿着正确方向健康发展的大事。

  脱离经济全球化,软件国际化的潮流,脱离UCS的大方向,孤立地搞民族化、本地化可能会是事倍功半,甚至事与愿违的。

  完全实现UCS,不仅促使操作系统改造,对通信程序、对很多应用程序也会有影响。

  通信协议也要考虑支持UCS。国家标准《信息技术 因特网中文规范——电子邮件传输格式》正是利用UCS作为通用信息交换代码。用户要通过因特网发送信息时,用本地字符集编码与UCS的转换模块将其转换成UCS-2或其变体形式(UTF-7、UTF-8)后在因特网上传送。接收方可以很容易地将UCS-2转换成本地的字符集编码。这样省去了接收方识别和判断对方发来的信息是用什么编码,也省去了用很多种转换方法将传送来的不同编码的信息分别转换成本地码。只需用一种UCS-2与本地码的转换方法就行了。如果发送方和接收方都用UCS,又可省去收、发时的转换。由此也可看出完全支持UCS的巨大好处。

  四、完全支持UCS,为中国软件业带来巨大好处。
  采用UCS还可大大降低各种软件本地化的工作量,一个为日本或朝鲜设计的软件,可以很容易地改为中文版本,只须改一改输入法和菜单而已。使用UCS也为中国软件走向世界提供了方便之路,专为中文开发的软件可以轻而易举地移植为国际上各地都能使用的版本,因为处理文本的核心软件并不需要改造。

  使用UCS也将大大降低各种软件本地化的成本,用户购买软件的费用也降低了,用户选择软件的范围也更大了。

  使用UCS使各种软件本地化的成本大大降低,使得软件开发商可以把人力,资金更多地投入到新产品的开发,一个产品在世界各地“同步推出”也更易于实现,用户也能更快地用上最新版本的新软件,那时我们可以说,我国自己开发的民族软件也是国际通用的国际软件。

  Linux和相关应用软件完全支持UCS后,我国可以通过制定标准,要求进入我国的类似软件也必须支持UCS,从而推动国际各软件公司也支持UCS。

  至于终端和打印机等硬件,我国已能制造、质量也不比国外的差。硬件设备支持UCS问题不会很大。我国率先实现终端和打印机等硬件完全支持UCS,还可通过制定标准保护国产产品,并可促进国际上的同类硬件产品也完全支持UCS。

  从核心改造Linux、使其完全支持UCS,下一步我们还要开发完全支持UCS的应用软件。但是为了与现有的应用软件、硬件兼容,操作系统还必须提供一种转换机制,将其核心使用的UCS代码映射成基于字节的本地字符集编码。

  人们对微软的意见主要是微软的垄断阻碍了技术发展,产品在中国售价太高,不开放源代码,有“后门”。但是,微软的Wihdows、Office毕竟在市场的占有率为第一,它确有很多地方值得学习,如易学好用,又如从核心完全实现了对UCS-2代码体系的支持。应该说微软在这方面是走在前面了。Windows NT/95/98/2000核心中完全实现了对UCS-2代码体系的支持,它为不同语言的用户提供了一个统一的、基于UCS-2代码的操作系统核心,并且应用软件Office97等也是基于UCS-2代码的。Windows NT/95/98/2000提供一组码页(codepage)来完成UCS-2与现有应用兼容,实现与本地语言如GB/GBK、Big5、JIS等之间的转换。Linux是否也能如此,在操作系统完全实现对ISO 10646(GB13000)UCS代码的支持,通过类似于codepage的映射与现在应用程序兼容,而不必再使用GB。Linux在这方面应向Windows学习,并希望Linux能做得更好。

  XML是取代现在在Web上流行的HTML的新一代Web语言。国外很多基于Web的程序都是以XML为基础的。如微软的.net就是以XML为基础的。而XML使用的字符集就是ISO 10646,默认的字符集是UCS-2。

如需转载请与赛迪网-技术天地联系


摘自:赛迪网-技术天地