分享
 
 
 

linux Q&A of I18N and L10N linux中文问题

王朝system·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

linux Q&A of I18N and L10N linux中文问题

linux Q&A of I18N and L10N linux中文问题 Q&A of I18N and L10N

ideal(2001-05-20 09:54)

〖返回〗〖转发〗

Copyright (C) 2001-2003 Marquis Weng <marquis_weng@bbs.ustc.edu.cn>

This file is part of "Q&A of I18N and L10N" documentation.

This documentation is free documentation; you can redistribute it

and/or modify it under the terms of the GNU General Public License

as published by the Free Software Foundation; either version 2, or

(at your option) any later version.

This documentation is distributed in the hope that it will be

useful, but WITHOUT ANY WARRANTY; without even the implied warranty

of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details. */

Q. 什么是i18n和l10n?

A. i18n是internationalization(国际化)的缩写,首位的i和末尾的n之间有

18个字母,所以就简写为i18n了;同样的道理l10n是localization(区域化)

的缩写。

Q. OK,我知道i18n和l10n是什么了,不过它们到底有什么用呢?我的目的只不

过是想让我的系统支持中文,没有必要跟我扯这么大的话题吧?

A. 这要从如何支持中文的方法谈起了。现在让程序支持中文一般有三种方法:

1. 使用外挂式中文系统。这种方法基本上只有输入和显示中文的功能,比

如Dos下的UCDOS;windows下的chinesestar;linux下的gce和cce等(

Turbolinux弄的那个UNICON是通过修改内核来支持中文的,因为我没有用

过这个东西,不知道是不是该把它归类到外挂式);X下面外挂式是通过

LD_PRELOAD来实现的,比如Turbo的ZhWinPro,通过设置LD_PRELOAD环境

变量,把X中原来不支持中文显示的函数替换成可以显示中文的函数,从

而得以显示中文。这种方法比较简单,但是功能有限,只能显示中文,而

不能正确处理中文,仍然是把一个汉字当成两个单字节来处理,导致的一

个最明显的结果是在编辑的时候常常会出现半个汉字的情况。而且由于

LD_PRELOAD的限制,不能处理和库做静态连接的程序,还常常导致系统不

稳定,因此这种方法慢慢的已经被抛弃。

2. 直接在程序中加入中文支持。一般是通过修改已有的程序源代码得到的。

比如,现在还比较常用的CXTERM就是通过修改XTERM的代码得到的;再如

中国科学院开发的支持中文的TEX预处理软件CCT(个人感觉,在中文排版

方面,CCT比CJK-Tex要强)。这种方法当然是非常好用的,而且编写出来

的程序,在效果方面甚至可以超过原来的程序。不过,遗憾的是这种方法

效率实在太低了,而且别人的程序每升级一次,旧的跟着修改一次程序。

所以除了极少数程序可以这么搞之外,大部分程序等另外想办法来中文化。

3. 第三种就是这个FAQ的主角i18n+l10n了。I18N为程序编写提供一个架构,

让同样的程序可以适用在各种语言习惯跟编码系统上面,程式设计人员只

要利用这个架构的机制跟准则编写应用程式,就可以在不需重新编译程序

的情况下,自然的支持各式各样的语言。目前I18N的设计的基本原则是,

把程序中处理和语言编码相关的部分资料独立出来。这些资料包括编码系

统的定义(比如大陆的简体中文GB2312;台湾的Big5编码);数字;日期;

货币的格式等。当然,还包括对用户来说可能是最重要的程序的输出信息。

这些和语言环境悉悉相关的资料,被称为locale database。把这部分独

立出来之后,就可以定义和语言环境细节无关的界面,从而使得程序员在

编写程序的时候,可以不被某种特定的语言环境所限制。而在程序执行的

时候,才通过使用者选择的语言环境,联系该语言环境所使用的locale

database 来获得该语言的支持。有了i18n的架构之后,对某种语言的支

持就只需要有该语言的locale database。实现对该语言的支持就叫做

L10N。对中文用户来说,中文化只不过是L10N的一种而已。

Q. 好象很不错的样子,不过我还是有点不太明白到底该怎样中文化。

A. 中文化和其它的语言的区域化没有多少不同。最重要的是需要建立locale

database。对于普通用户来说,系统部分的locale database基本上不用自己

操心,现在已经有了中文的locale database了,而且最近推出的几个linux

distribution都带了中文locale database,你只要安装一下就行了。然后就

只要告诉程序你所使用的语言环境就行了。告诉程序你所使用的语言环境可

以通过设置环境变量LC_ALL来实现。对于中文用户可以设LC_ALL为

zh_CN.GB2312或者zh_CN.GBK。这样操作之后,你就获得简体中文的支持了。

当然,前提是你已经安装了相应的locale database。

Q. zh_CN.GB2312,zh_CN.GBK?很怪的名字,能告诉我是什么意思吗?

A. locale database(简称locale)的名字包含下面几个部分,其中[]里面的是

可选的:

language[_territory[.encoding]][@modifier]

对照来说:zh_CN.GB2312中,zh表示中文的意思,CN表示中国大陆,GB2312

表示所使用的编码方式是GB2312;同样zh_TW.Big5表示台湾的Big5编码的中

文locale。语言(language)通常是两个小写字母,它使用的是ISO 639规定

的语言缩写;地区是两个大写字母表示的,遵循ISO 3166标准(iso639和

iso3166 这两个标准可以从ftp://dkuug.dk/i18n/下面找到)。另外,需要

注意的是,在glibc-2.2中,编码(encoding)部分都采用小写的,即

zh_CN.GB2312按照标准应该写成zh_CN.gb2312,不过由于历史原因,目前这

两者还是通用的。

Q. 我怎么判断是否安装了某个locale?

A. 运行一下locale -a看看你的系统目前安装的所有locale。如果有你想要的

locale的名字,就表示已经安装了该locale。

Q. 我的系统没有安装中文locale,怎么办?

A. 因为不同的系统,有不同的安装方法,我只能说一下我使用过的系统的安装。

因为locale在glibc-2.1以下的系统并没有被实现,所以glibc-2.1以下的系

统应该把升级系统的计划列在你的日程表中了。glibc-2.1本身不带有中文

locale,不过幸好各个linux distribution大多都带了中文locale,比如

Turbo就带了一个locale-zh-0.97-1.rpm的包,安装一下就可以了。对于别的

使用glibc-2.1,但又没有中文locale的linux distribution,比如

slackware-7.0,要安装中文locale办法还是有的,从别的系统里面偷来中文

locale的source,编译安装一下就可以了。Debian的potato里面有一个

zh-locale,就是中文locale包,用dselect或者apt-get来安装一下也就行了。

glibc-2.2已经把中文locale包含在里面,所以不需要特定安装中文locale包。

但是有些系统本身不生成这些locale,需要用户自己来生成。比如Debian的

woody,你就需要修改/etc/locale.gen文件,去掉中文的locale对应行的注

释,然后运行一下locale.gen就能产生中文locale。

Q. 我用的系统是基于glibc-2.1的,已经安装了zh_CN.GB2312的locale,为什么

还不能正常使用这个locale?

A. 一个可能的原因是,你用的distribution没有告诉glibc该如何处理GB2312编

码,解决的方案是在/usr/lib/gconv-modules搜索GB2312的字样,如果没有

找到的话,就在该文档里面寻找"modules EUC-CN"字样,然后在这一行之前

加上如下一行

alias GB2312// EUC-CN//

保存之。这样你的系统差不多就应该支持zh_CN.GB2312这个locale了。

Q. 现在我能够确定我的系统已经安装并支持了中文locale了,但是如何判断我

是否已经设置好了locale环境?

A. 运行一下locale命令,就可以看到现在的locale环境是什么。

Q. oh,运行了一下locale命令,出现一堆输出,

LANG=C

LC_CTYPE="zh_CN.GB2312"

LC_NUMERIC="zh_CN.GB2312"

LC_TIME="zh_CN.GB2312"

LC_COLLATE="zh_CN.GB2312"

LC_MONETARY="zh_CN.GB2312"

LC_MESSAGES="zh_CN.GB2312"

LC_ALL=zh_CN.GB2312

它们都是什么意思?

A. 这些环境变量就是和你使用的语言环境相关的信息。LANG是语言环境,不过

这个变量的等级最低,改变别的环境变量可以使之失效。LC_CTYPE是表明字

符分类应该使用哪个locale的资料,正是一个locale最基本的要素,通常和

该locale使用的编码有关,要使用中文locale的话,一定要设置这个变量。

LC_NUMERIC,LC_TIME,LC_COLLATE,LC_MONETARY分别表示数字,时间,排

序和货币单位使用哪个locale的资料,LC_MESSAGE表示应该使用哪个locale

的信息作为输出,对于中文用户,如果你想看中文界面的话,最好还是设成

中文的。LC_ALL是表示上面所有的资料,只要设置了LC_ALL为某个特定的变

量,其它的会自动跟着变过来,如果没有什么很充分的理由,通常是设置

LC_ALL就够了,不用每个变量一一去设置。glib-2.2中还添加了几个变量,

比如LC_PAPER,LC_ADDRESS等,大体从名字可以猜出意思。

除了这几个环境变量之外,还有一个LANGUAGE的环境变量,设置它之后,

LC_MESSAGES就失效了,LANGUAGE比LC_MESSAGES酷的是,你可以通过设置

LANGUAGE来使用多个locale,比如

export LANGUAGE=de:fr:en

这个在多语言的程序中可能有用,不过我从来没有使用过这个玩意。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有