📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: yanglc (魂归燕园), 信区: Linux <BR>标 题: 三 X 窗口系统的国际化 <BR>发信站: BBS 水木清华站 (Sun May 14 22:30:47 2000) <BR> <BR>www.linuxforum.net <BR>1和2前面有。 <BR> <BR>三 X 窗口系统的国际化 <BR> <BR>在 X 窗口系统上的国际化, 特别是中文化, 主要体现在显示,输入和打印三个方面. <BR> <BR>1. 显示的国际化 <BR> <BR>1. 字符集和编码 <BR> <BR>在Linux上经常使用的字符集是ISO 8859系列的字符集. 它包含了10个 多语 <BR>言的单字节编码字符集. 它们分别是, <BR>字符集 涵盖语言 <BR>拉丁一字符集, 包含绝大多数的欧洲语言, <BR>例如French(fr), Spanish (es), Catalan <BR>(ca), Basque (eu), Portuguese (pt), <BR>Italian (it), Albanian (sq), <BR>Rhaeto-Romanic (rm), Dutch (nl), <BR>ISO 8859-1(Latin1) German (de), Danish (da), Swedish <BR>(sv), Norwegian (no), Finnish (fi), <BR>Faroese (fo), Icelandic (is), Irish <BR>(ga), Scottish (gd), English (en), <BR>Afrikaans (af) 和 Swahili (sw). 影响了 <BR>美洲, 澳洲和非洲. <BR>拉丁二字符集, 包含了中欧和东欧的语 <BR>ISO 8859-2(Latin2) 言:Czech (cs), Hungarian (hu), Polish <BR>(pl), Romanian (ro), Croatian (hr), <BR>Slovak (sk), Slovenian (sl), Sorbian. <BR> <BR>ISO 8859-3(Latin3) 拉丁三字符集, 包括: Esperanto (eo) and <BR>Maltese (mt) <BR> <BR>拉丁四字符集, 包括: Estonian (et), 巴 <BR>ISO 8859-4(Latin4) 尔地克 Latvian (lv) 和 Lithuanian <BR>(lt), Greenlandic (kl) , Lappish. <BR>Bulgarian (bg), Byelorussian (be), <BR>ISO 8859-5(西里尔语) Macedonian (mk), Russian (ru), Serbian <BR>(sr) <BR>ISO 8859-6(阿拉伯语) 阿拉伯语(ar) <BR>ISO 8859-7(希腊语) 希腊语(el) <BR>ISO 8859-8(希伯来语) Hebrew (iw) 和Yiddish (ji) <BR> <BR>ISO 8859-9(Latin5) 重排了Latin1, 用土耳其语的几个字母做了 <BR>替换 <BR> <BR>ISO 8859-9(Latin6) 重排了Latin4, 去掉了某些符号, 增加了 <BR>Inuit等 <BR>ISO 8859-11(泰国语) 泰国语(th) <BR> <BR>ISO 8859-12 Celtic <BR> <BR>ISO 8859-13(Latin7) Baltic Rim 和 Lativian(lv) <BR>ISO 8859-14(Latin8) Gaelic 和 Welsh (cy) <BR>ISO 8859-15(Latin9) Latin1的变种, 修改了某些字母 <BR> <BR>双字节字符集主要包含中文,日文和韩文. 它由前导字节(Lead Byte) 和尾 <BR>部字节(Trail Byte)构成, 由于一个字符采用了两个字节, 在软件的 国际 <BR>化方面又增加了一些麻烦, 比如在显示上, 光标的位置不能位于汉字 之间, <BR>删除和移动时必须是整字操作等, 在输入上, 一般需要预编辑服务器 才能 <BR>输入汉字. 下表列出了中日韩语言编码的有关信息: <BR> <BR>语 前导字节范 <BR>言 字符集 代码页 围 尾部字节范围 <BR>简 GB2312-1980 CP936 0xA1-0xF7 0xA1-0xFE <BR>体 <BR>中 <BR>文 GBK 无 0x81-0xFE 0x40-0x7E, 0x80-0xFE <BR>中 <BR>文 <BR>繁 BIG-5 CP950 0x81-0xFE 0x40-0x7E, 0xA1-0xFE <BR>体 <BR>日 0x81-0x9F, <BR>文 Shift-JIS CP932 0xE0-0xFC 0x40-0xFC(0x7F除外) <BR>KSC-5601-1987 CP949 0x81-0xFE 0x41-0x5A,0x61-0x7A,0x81-0xFE <BR>0x84-0xD3 <BR>韩 0xD8 0x41-0x7E <BR>文 KSC-5601-1992 CP1361 0xD90-0xDE 0x81-0xFE <BR>0xE0-0xF9 0x31-0x7E <BR>0x41,0xFE <BR> <BR>最近, 信息产业部和国家质量技术监督局联合发布了两项新的中文信息 处 <BR>理基础性国家标准,为解决偏、生汉字的输入提供了方案。其中GB18030- <BR>2000《信息技术和信息交换用汉字编码字符集、基本集的扩充》,为强制性 <BR>国家标准. 它收录了2.7万多个汉字,总编码空间超过150万个码位,为彻底 <BR>解决邮政、户政、金融、 地理信息系统等迫切需要的人名、地名用字问题 <BR>提供了解决方案,也为汉字研究、古籍整理等领域提供了统一的信息平台基 <BR>础。 这项标准还同时收录了藏文、蒙文、维吾尔文等主要的少数民族文字. <BR>字符 集编码范围是: <BR> <BR>字节数 编码空间 码位数目 <BR>单字节 0x00-0x80 129 <BR> <BR>双字节 第一字节:0x81-0xFE 23940 <BR>第二字节:0x40-0x7E,0x80-0xFE <BR> <BR>四字节 四字节范围分别是: 1587600 <BR>0x80-0xFE,0x30-0x39,0x81-0xFE,0x30-0x39 <BR> <BR>香港特别行政区也对Big5编码提出了"香港增补字符集", 其目的,是 收纳 <BR>香港特区政府及市民在中文电子通讯中有需要使用的字符,来补充目前 大 <BR>五码和ISO10646编码标准内并未包含的字符,以作为一个通用的中文界面, <BR>方便大家能准确地以中文进行电子通讯。香港增补字符集有两套编码方案, <BR>一套适用於大五码系统,另一套适用於ISO10646平台。香港增补字符集的大 <BR>五码版本,实际上是政府通用字库的增订版。ISO10646国际编码标准目前并 <BR>未包含香港增补字符集内的所有字符。目前尚未收纳在ISO10646内的香港增 <BR>补字符集字符,均已提交国际标准化组织管辖下的表意文字小组,以考虑是 <BR>否纳入ISO10646日后的新增版本内. <BR> <BR>上述标准和草案应该是以后的中文Linux所应该遵循的. <BR> <BR>2. 多字节字符(Multibyte)和宽字符(WideChar)的使用 <BR> <BR>我们平时见到的以文本方式存在的字符都是多字节字符, 它主要用于 文件 <BR>存储和网络上的以流(Stream)的方式传输. 一个GB编码的汉字需要两个 字 <BR>节. 多字节字符的缺点是在中文处理上不方便, 比如汉字的删除和光标的 <BR>移动都会有半汉字问题. 为了文本处理的方便, 在内部操作上通常是把汉字 <BR>与英文的混和字符串先转换成等宽度的字符串, 即宽字符, 为软件的内部处 <BR>理 提供方便. <BR> <BR>glibc2.1.x中多字节字符串和宽字符串的转换有时有问题. 在X下还可以 使 <BR>用另外一种方式完成转换, 即使用XmbTextListToTextProperty()和 <BR>XwcTextPropertyToTextList() 联合完成转换. <BR> <BR>3. Unicode <BR> <BR>目前所使用的Unicode 是一种16位字宽的字符编码, 它由非赢利的计算机 <BR>组织Unicode研讨会维护和改进. 它起源于Xerox和Apple之间的合作研究. <BR>几 个公司组成了一个非正式的论坛, 接着IBM, Microsoft等公司迅速加入. <BR>Unicode研讨会在1990年发表了Unicode标准版本1, 同时国际标准化组织完 <BR>成 了一种类似的编码----ISO 10646. 因为没有必要存在两套标准, 所以 <BR>Unicode 研讨会和国际标准化组织在1991到1992合二为一. 1994年, 中国和 <BR>日本开始对 基于ISO10646上的国家标准进行工作. 现在, Unicode 开始用 <BR>在许多产品中. <BR> <BR>Unicode包含了当今计算机领域中广泛使用的所由字符, 如世界上大部分 的 <BR>书面语言, 印刷字符, 数字和技术符号, 地理图形和标点符号. 由于 <BR>Unicode 的一致性, 它在大多数情况下都可能简化软件的国际化过程. 它取 <BR>消了处理 多种代码页的必要, 并且由于是16位编码, 因此由双字节字符集 <BR>所引起的额外 处理也不必要了. <BR> <BR>但是, Unicode作为一种编码也有它的缺陷, 比如编码的位置与排序无关, <BR>所以使软件支持Unicode仅仅是国际化的第一步, 实际情况中还需要与语言 <BR>相关 的信息和规则. 所以Unicode一般作为程序的内部处理编码, 必须提供 <BR>与其它 编码的双向转换表. <BR> <BR>最后需要说明的是, 虽然使用Unicode会使普通的英文文本大两倍, 但是 使 <BR>用Unicode的整个系统却不会增加太大, 因为系统存放的文件大部分是二进 <BR>制 文件格式, 同时, 使用针对Unicode的压缩方式, 可以把文件压缩成和使 <BR>用对应 的8位正文一样大小. <BR> <BR>4. 字体(Font)和字体集(FontSet) <BR> <BR>在X窗口系统下使用的字体都必须在X服务器中注册X逻辑字体描述(X <BR>Logical Font Description)名. 它包括了字体的许多信息, 例如以下为西 <BR>文字体和中文 字体的两个例子. <BR> <BR>1. -adobe-times-medium-r-normal--14-140-75-75-p-74-iso8859-1 <BR>2. -tlc-song-medium-r-normal--24-240-75-75-c-240-gbk-0 <BR> <BR>为了方便使用, 用户还可以给每一个字体加一个或多个别名, 别名文件 <BR>fonts.alias 放在字体目录下, 可以手工编辑. 当字体目录变更或别名变更 <BR>后, 必须使用命令 "xset fp rehash"或重新启动X才起作用. <BR> <BR>X 字体也可以通过字体服务器(Font Server)加载. 这对于本地不放字体 的 <BR>系统或X终端特别有用. 加载的协议可以是TCP或DECNET. <BR> <BR>X 窗口系统的字体在X Server中之存在一份, 当所由软件都不使用它时, 字 <BR>体的内存自动施放. <BR> <BR>字体中包含了制造商名, 字体类型, 权重, 字体大小, 字符集等信息. 它们 <BR>也 可以缩写, 省去的部分用星号代替, 比如对上面的中文字体, 可以缩写 <BR>为: <BR> <BR>-*-song-*-24-*-gbk-0 <BR> <BR>在实际应用中, 字符串往往是中文和英文的混和字符串, 所以必须使用两种 <BR>字体来绘出该字符串, 这种指定两种或两种以上的字体的描述就是字体集. <BR>字体 集一般的格式是把多种字体用逗号隔开, 比如, 指定下列字体集: <BR> <BR>"-adobe-helvetica-medium-r-normal--14-*-*-*-*-*-iso8859-*,\ <BR>-tlc-song-medium-r-normal--14-*-*-*-*-*-gbk-0" <BR> <BR>令人遗憾的是, 中文的GB编码和Big5编码有重叠区域, 不能区分开来, 所以 <BR>字体集并不能同时指定GB和Big5的字体. <BR> <BR>字体集的具体载入受到Locale的影响. <BR> <BR>在许多已经国际化的软件和图形库中, 一般通过资源文件让用户指定字体 <BR>集, 比如gtk的简体中文资源文件为/etc/gtk/gtkrc.zh_CN, qt-1.44(国际 <BR>化的)的 资源文件是 ~/.qti18nrc 等等. <BR> <BR>2. 信息的国际化 <BR> <BR>信息(Message)国际化是软件国际化中比较重要的一环, 如果使软件可以 支持多 <BR>种语言, 在设计时就应当考虑到信息的国际化问题. 现在的绝大多数 软件使用 <BR>GNU的gettext作为基本工具. 信息国际化的基本步骤是: <BR>o 在软件初始化时设置使用setlocale()设置Locale <BR>o 使用gettext宏定义, 使程序看上去比较方便: <BR>o 指定信息的位置: <BR>o 指定翻译信息: _("Some Strings"); <BR>o 在软件完成后,使用 xgettext 提取信息并翻译 <BR>o 使用msgfmt把信息文件转换为.mo文件, 安装到locale目录下 <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -