国际语言环境指南

第 1 章 Solaris 国际化概述

本部分探讨有关国际化和本地化的一些常规信息。

Solaris 9 产品包含对选定的语言环境的完全 Unicode 3.1 支持(如 Unicode 和 ISO/IEC 10646 中所定义)。Solaris 9 发行版是 Sun 在国际市场的一个重要版本。它包括一些新特征。

Solaris 9 操作环境自诞生之日起便被设计为能够使用世界上的各种语言。通过可插接式、基于服务的全球化方法,Solaris 国际化体系结构简化了世界范围内的应用程序和语言服务的开发、部署和管理。在一个方便的多语种产品中,用户将能从对 39 种不同语言和 162 种语言环境(包括支持泰语和印地语所需的复杂文字布局环境以及针对阿拉伯语和希伯来语等语言的双向布局环境)的广泛支持中受益。

Solaris 国际化体系结构为处理输入法、字符集编码、代码集转换以及语言服务的其它基本方面提供了灵活的可插接式方法。您可以在所提供的功能强大的工具中进行选择,也可以定制您的环境。您可以在多个语言环境中部署应用程序,而不必了解输入法如何工作或者需要启用哪个代码集转换器,您只需遵循标准 API 即可。您还可以定制特定的语言属性。 该体系结构使您能够更改转换器表或添加新的输入法编辑器。

Solaris X 全球化框架的源代码于 2000 年秋季向公众发布。您现在能够通过遵循通用的参考实现来增强全球应用程序的兼容性和互操作性,并能同时参与基本代码的改进。独立于代码集的全球化方法使您能够在当地编码环境中进行操作或加入不断扩大的 Unicode 世界。Solaris 框架有一套功能丰富的数据转换器,用于确保各种编码和各种平台(如 Microsoft Windows 或 Macintosh)之间的互操作性,从而使您能够跨平台进行操作。

Solaris 还帮助跨国公司在世界范围内调整其服务器管理规模。与竞争性平台不同,Solaris 平台使用基于服务的方法来管理语言服务。 服务器管理员可以通过全球网络远程启用语言服务,而无论什么客户系统。通过这一与客户机无关的方法,您就可以轻松地对系统进行升级而不必更改客户机应用程序。例如,一位需要阅读从巴黎一家网吧发送的电子邮件的阿拉伯语用户仍可阅读用其本国语言撰写的电子邮件,而无须修改本地客户机应用程序。

新增的国际化和本地化特征

以下特征是 Solaris 9 发行版的新特征:

国际化和本地化的定义

国际化和本地化是两个不同的过程。国际化是指使软件可在多个语言或地区之间移植的过程,而本地化则是指使软件适用于特定语言或地区的过程。 国际化的软件可以使用在运行时根据特定文化要求修改程序行为的接口来开发。 本地化涉及到建立联机信息以支持某个语言或地区(称为 语言环境)。

与必须彻底重新编写才能用于不同当地语言和习惯的软件不同,国际化软件不需要进行重新编写。国际化的软件可在不进行更改的情况下从一个语言环境移植到另一个语言环境。 Solaris 系统是国际化的系统,提供了创建国际化软件所需的基础结构和接口。

国际化的基本步骤

国际化应用程序的可执行映像可在各语言和地区之间进行移植。 要对软件进行国际化,应当:

针对某一语言或地区对信息字符串进行翻译。 语言环境 包括信息字符串和指定排序的方法。

要使用某个产品的本地化版本,用户需要设置一些环境变量。 然后,该产品将显示经过翻译的信息。日期、时间、货币和其它信息根据特定于语言环境的惯例进行格式设置和显示。 信息翻译和联机帮助内容在各个不同的层中提供,如下图所述。

图形 1–1 Solaris 操作环境中的语言环境的功能和结构

Graphic

Solaris 界面中的本地化功能

OS 语言环境层提供基本的语言环境数据库和功能,这些数据库和功能在应用程序运行时插入到 OS 系统接口中。 应用程序通过标准 API 访问这些 OS 语言环境模块。

X11 语言环境层将该接口提供给 X 输入法和 X 输出方法,以便 X11 应用程序可以进行本地文本输入和显示。 所提供的字体使应用程序能够显示各种语言中的字符。

CDE/Motif 构建在 X11 窗口系统之上。因此,它可以通过 X11 API 使用 X11 语言环境功能。对于 CDE 应用程序,Solaris 本地化具有各种特定于语言环境的配置,从而使桌面能够在目标语言环境中工作。 在各个不同的层中提供了信息翻译和联机帮助内容。

什么是语言环境?

程序的语言环境 是应用程序的一个重要概念。语言环境是指当地语言环境的显式模型和定义。ANSI C 语言标准的库定义中明确定义并包含了语言环境的概念。

一个语言环境包括许多种类,对于这些种类,存在与国家/地区有关的格式设置或其它规范。一个程序的语言环境定义它的代码集、日期和时间格式设置惯例、货币惯例、十进制格式设置惯例和排序顺序。

语言环境可由基本语言、 使用国家(地区)和可选的 代码集组成。通常采用代码集。 例如,德语是 de(Deutsch 的缩写),而瑞士德语是 de_CHCH 是 Confederation Helvetica 的缩写)。 这使得能够区别国家/地区之间的特定差异,如货币单位表示法。

一个特定语言可以与多个语言环境相关联,这使得能够区分地区间的差异。 例如,美国的英语用户可以选择 en_US 语言环境(美国英语),而英国的英语用户可选择 en_GB(英国英语)。

语言环境名称通常由 LANG 环境变量指定。语言环境种类从属于 LANG,但也可单独设置,这时它们将覆盖 LANG。如果设置了 LC_ALL 操作数,则它不但覆盖 LANG,而且还将覆盖所有单独的语言环境类别。

语言环境命名惯例如下:

语言[_地区][.代码集] [@修饰符]

其中双字母语言代码来自 ISO 639,并且双字母地区代码来自 ISO 3166,代码集表示在该语言环境中使用的代码集的名称,而修饰符则表示将该语言环境与不带该修饰符的语言环境相区分的特征名称。

所有 Solaris 产品语言环境都保留了具有 US-ASCII 代码值的可移植字符集 (PCS) 字符。

有关可移植字符集的详细信息,请参考“X/Open CAE 规范: 系统接口定义,第 5 期” (ISBN 1–85912–186–1)。

一个语言环境可以有多个语言环境名称。例如 POSIXC 是相同的。

完全语言环境和不完全语言环境

完全 Solaris 语言环境具有列出的所有功能和相关语言的本地化系统信息。不完全语言环境 未安装任何本地化信息。只要安装了相关语言的本地化信息,Solaris 环境中的所有语言环境便能够显示这些本地化信息。例如,下列语言环境既可以是不完全语言环境,也可以是完全语言环境:

在使用 Language CD 安装了德语信息翻译后,以上所有语言环境均成为完全语言环境,因为它们可以访问完全翻译了的桌面。该 Language CD 包含下列语言和语言环境的信息翻译:

所有不完全语言环境都可从 Software CD 中获得。 信息翻译可从 Software CD 中获得。

所有英语语言环境也是完全语言环境,并可从 Software CD 中获得。

受语言环境影响的行为

在编写日期和时间、格式化数字、分隔单词和短语以及引用材料方面,不同文化通常使用不同的惯例。 在整个系统中,语言环境决定了下列项目的行为:

Solaris 环境将语言和与文化有关的信息与应用程序分开,并在应用程序以外将其保存起来。这样,您就不必针对每个市场对应用程序进行翻译、重新编写或重新编译了。进入新市场的唯一要求就是将外部信息本地化为本地语言和习惯。

语言环境种类

语言环境种类如下所示:

LC_CTYPE

控制字符处理功能的行为。

LC_TIME

指定日期和时间格式,包括月份名称、每周日期和通用的完整表示法和缩写表示法。

LC_MONETARY

指定货币格式,包括该语言环境的货币符号、千位分隔符、符号位置、小数位数等。

LC_NUMERIC

指定十进制分隔符(或基数字符)、千位分隔符和分组。

LC_COLLATE

指定排序顺序和该语言环境的正规表达式定义。

LC_MESSAGES

指定编写本地化信息的语言,该语言环境的肯定和否定响应(yes no 字符串和表达式)。

LO_LTYPE

指定提供有关语言绘制信息的布局引擎。 语言绘制(或文本绘制)由文本形状和方向性组成。

使用语言环境种类进行本地化

产品的本地化应通过向该目标语言或地区的本地用户咨询来完成。某些信息样式和格式在开发人员看来可能非常直观和常见,而在用户看来却显得很别扭或者是错误的,甚至会令人不快。以下部分描述了 Solaris 操作环境中的某些元素,您可以控制和指定这些元素以便成功地对该产品进行本地化。

时间格式

下表显示了一些不同的语言环境中 11:59 P.M 的写法。

表 1–1 国际时间格式

语言环境 

格式  

加拿大语 

23:59  

芬兰语  

23.59  

德语 

23.59 Uhr  

挪威语 

23.59  

泰语 

23:59 

大不列颠 

23:59  

时间用 12 小时制和 24 小时制两种方式表示。 小时和分钟分隔符可以是冒号 ( : ) 或句点 ( . )。

在不同的国家/地区之间以及国家/地区内部存在着时区划分。 尽管时区可以根据早于或晚于协调通用时间(UTC)或格林威治时间 (GMT) 的小时数来描述,但该数字并不总是整数。例如,纽芬兰所在的时区与相邻时区相差半小时。

夏时制时间 (DST) 开始和结束的日期可能因国家/地区的不同而不同。很多国家/地区根本不实行夏时制。 此外,夏时制时间还可能在某一个时区内部存在差别。 在美国,不同的州有不同的夏时制时间。

日期格式

下表显示在世界各地使用的一些日期格式。 请注意,即使在一个国家/地区内部,日期格式可能也有所不同。

表 1–2 国际日期格式

语言环境  

惯例 

示例  

加拿大语(英语) 

dd/mm/yy 

24/08/01 

丹麦语  

yyyy-mm-dd 

2001–08–24 

芬兰语  

dd.mm.yyyy 

24.08.2001 

法语 

dd/mm/yyyy 

24/08/2001 

德语 

yyyy-mm-dd 

2001–08–24 

意大利语 

dd/mm/yy 

24/08/01 

挪威语  

dd-mm-yy 

24–08–01 

西班牙语 

dd-mm-yy 

24-08-01 

瑞典语 

yyyy-mm-dd 

2001-08-24 

英国 

dd/mm/yy 

24/08/01  

美国 

mm-dd-yy 

08-24-01 

泰语 

dd/mm/yyyy 

24/08/2001 

数字

英国和美国是世界上使用句点表示小数点位置的为数不多的几个地方中的两个。 而其它许多国家/地区都使用逗号。小数点分隔符又称为基数 字符。同样,英国和美国使用逗号分隔千位组,而其它许多国家/地区则使用句点,同时还有一些国家/地区使用短空格来分隔千位组。

包含特定于某一语言环境的格式的数据文件在传送到其它语言环境的系统时经常被错误地解码。例如,一个包含法语格式数字的文件不能用于特定于英国的程序。

下表显示了一些常用的数字格式。

表 1–3 国际数字惯例

语言环境  

较大数字 

加拿大语(英语)  

4,294,967.00 

丹麦语  

4.294 967.295,00 

芬兰语  

4 294 967 295,00 

法语 

4 294 967 295,00 

德语 

4,294,967.00 

意大利语 

4.294.967,00 

挪威语  

4.294.967.295,00 

西班牙语 

4.294.967.295,00  

瑞典语 

4 294 967 295,00 

英国 

4,294,967,295.00 

美国 

4,294,967,295.00 

泰语 

4,294,967,295.00 


注意:

没有特定的语言环境惯例用来指定列表中数字的分隔方式。


货币

货币单位和表示规则在世界各地差别很大。 本地和国际货币符号可能是不同的。 下表显示了一些国家/地区的货币格式。

表 1–4 国际货币惯例

语言环境  

货币 

示例  

加拿大语(英语)  

美元 ($) 

$1,234.56 

加拿大语(法语) 

美元 ($)  

1 234,56$ 

丹麦语  

克朗 (kr) 

Kr 1.234,56  

芬兰语  

欧元 (Graphic)

Graphic1 234,56

法语  

欧元 (Graphic)

Graphic1,234

日语 

日元 (¥) 

¥ 1,234  

挪威语  

克朗 (kr) 

kr 1.234,56  

瑞典语  

克朗 (Kr) 

1 234,56 Kr 

英国 

英镑 (£) 

£1,234.56  

美国  

美元 ($)  

$1,234.56  

泰语 

铢 

2539 铢 

欧元  

欧元 (Graphic)

Graphic5,000

Solaris 9 软件支持欧元。 本地货币符号仍然可用,以保持向后兼容性。

表 1–5 支持欧元的用户语言环境

地区 

语言环境名称 

ISO 代码集 

奥地利 

de_AT.ISO8859-15

8859-15 

比利时(法语) 

fr_BE.ISO8859-15

8859-15  

比利时(佛兰德语) 

nl_BE.ISO8859-15

8859-15  

丹麦 

da_DK.ISO8859-15

8859-15  

芬兰 

fi_FI.ISO8859-15

8859-15  

法国 

fr_FR.ISO8859-15

8859-15  

德国 

de_DE.ISO8859-15

8859-15  

爱尔兰 

en_IE.ISO8859-15

8859-15  

意大利 

it_IT.ISO8859-15

8859-15 

荷兰 

nl_NL.ISO8859-15

8859-15  

葡萄牙 

pt_PT.ISO8859-15

8859-15 

西班牙加泰罗尼亚 

ca_ES.ISO8859-15

8859–15 

爱沙尼亚 

et_EE.ISO8859–15

8859–15  

西班牙 

es_ES.ISO8859-15

8859-15  

瑞典 

sv_SE.ISO8859-15

8859-15  

英国 

en_GB.ISO8859-15

8859-15  

美国 

en_US.ISO8859-15

8859-15  

欧元语言环境基于 ISO8859–15 代码集。

请记住,经过转换 的货币金额可能比原始货币金额占用更多或更少的空间。 例如: $1,000 可能变为 Graphic1.307.000。

欧元地区中语言环境的当前语言环境设置的状态由 locale 公用程序的 LC_MONETARY 操作数表示。例如,下表显示了“德国”的状态。

表 1–6 德国语言环境和相应的 LC_MONETARY

语言环境  

LC_MONETARY 

de_DE.ISO8859–1

DM 

de_DE.ISO8859–15

Euro 

de_DE.UTF-8

Euro 

de_DE.ISO8859–15@euro

Euro 

de_DE.UTF-8@euro

Euro 

语言单词和字母差异

本部分描述各种语言之间的重要差异。

单词分隔符

在英语中,单词通常用空格字符来分隔。 而在中文、日语和泰语等语言中,单词之间通常没有分隔符。

排序顺序

特定字符的排序顺序并非在所有语言中都是相同的。例如,在德国,“ö”与普通的“o”的排序顺序相同,而在瑞典,两者却分别进行排序,其中前者位于字母表的末尾。在某些语言中,字符具有确定字符序列优先级的权值。例如,泰语词典通过重量不同的字符序列来定义排序。

字符集

各字符集在字母字符和特殊字符的数量上可能有所不同。英语字母表只包含 26 个字符,而某些语言却包含更多字符。例如,日语可包含 20000 多个字符,而中文可包含比这一数目还要多的字符。

西欧字母表

大多数西欧国家/地区的字母表类似于英语国家/地区使用的标准的 26 个字符的字母表,但往往还包含一些附加基本字符、一些带标记(或带重音)的字符和一些连字符。

日语文本

日语文本由三种不同的书写体混合而成: 源自中文的日语汉字和两种语音书写体(或音节),即平假名和片假名。

尽管平假名中的每个字符在片假名中都有一个等效字符,但平假名是最常用的书写体,具有类似草书而不是块状的字母形式。日语汉字字符用于拼写词根。片假名通常用于表示“外来”词,即从日语以外的其它语言中“引入”的词。

日语汉字包含成千上万个字符,但其中常用字符数正在逐年减少。现在经常使用的字符只有 3500 个,尽管普通日本作家的日语汉字字符的词汇量大约为 2000 个。然而,出于日本工业标准 (JIS) 的需要,计算机系统必须支持 7000 个以上的常用字符。此外,还有大约 170 个平假名和片假名字符。平均来讲,日语文本中有 55% 是平假名,35% 是日语汉字,10% 是片假名。日语文本中也包含阿拉伯数字和罗马字母。

尽管可以完全避免使用日语汉字,但大多数日语读者发现一篇不带任何日语汉字的文本很难理解。

朝鲜语文本

朝鲜语文本可使用称为“朝鲜语文字”的语音文字系统进行拼写。 朝鲜语文字包含 11000 多个字符,这些字符由称为“字母”的辅音和元音组成。 朝鲜语计算机系统中通常使用的字符大约有 3000 个,这些字符来自整个朝鲜语文字字符词汇。朝鲜语还使用名为“朝鲜语汉字”的象形字,这些象形字基于中国发明的字符集。朝鲜语文本需要 6000 多个朝鲜语汉字字符。 当朝鲜语文字表意不太明确时,常使用朝鲜语汉字来避免混淆。朝鲜语文字字符由组合在一起的辅音和元音构成。 两者组合在一起可构成音节,即朝鲜语文字字符。 朝鲜语文字字符通常排列在一个方框中,以便形成的字符组与朝鲜语汉字字符占用相同的空间。 朝鲜语文本中还包含阿拉伯数字、罗马字母和特殊符号字符。

泰语文本

一个泰语字符可在显示屏上定义为包含四个显示单元的列位置。 每个列位置最多可包含三个字符。 显示单元的组成基于泰语字符的分类。 某些泰语字符可由其它字符的分类组成。 如果可将它们组合在一起,则这两个字符将位于同一单元中。 否则,它们将分别位于不同的单元中。

中文文本

中文通常全部由称为汉字的象形书写体中的字符组成。

如果字符不是根字符,则它通常由两个或多个部分组成,而两个部分最为常见。 在两部分字符中,一部分通常表示意义,一部分则表示发音。 有时两部分都表示意义。 偏旁部首是最重要的元素,而字符传统上是按偏旁部首进行排列的,偏旁部首的数量有几百个。一个发音可用多个不同的字符表示,这些字符是不可交替使用的。 一个字符可以有多个发音。

在给定上下文中使用某些字符比使用其它字符更为适合 — 适当的字符通过使用声调从语音上加以区分。 与此相反,日语口语和朝鲜语口语则没有声调。

表示中文的语音系统有若干种。 在中国,最常用的是拼音(它使用罗马字符),它在西方经常用于表示地点,如 Beijing。 威托玛式系统是一种比较陈旧的语音系统,曾经用于表示地名(如 Peking)。 而在中国台湾地区,经常使用的则是注音(即 注音符号),它是一种具有独特字母形式的语音字母表。

希伯来语文本

希伯语文本用于拼写希伯来语和意第绪语书写体,它比英语早数千年。希伯来语是一种双向书写体,这是因为希伯来语字母是从右向左进行读写的,而数字则是从左向右读的。 嵌入到希伯来语文本中的所有英语文本也是从左向右读的。

希伯来语使用 27 个字符的字母表,并使用标准拉丁语(或英语)字母表中的标点符号和数字。 希伯来语文本还包含元音和发音标记。 这些标记可以通过基本字符内部的点 (Dagesh) 、字符下的元音标记或字符左上角的重音等形式出现。 这些标记通常只用于礼拜式文本中,而很少在日常生活中见到。 希伯来语中也没有大写字母。

印地语文本

印地语文本用称为“天城书”(意思是“神的手笔”)的书写体书写。印地语是一种语音语言,并通过一系列音节进行拼写。 每个音节都由三种类型的字母片段(天城书字符)构成: 辅音字母、独立元音和依赖元音符号。 音节本身由辅音和元音核心组成,同时还包含一个可选的前缀辅音。 与英语(从基准线开始)不同,天城书字符从写在字符顶部的水平线(称为头笔) 悬垂向下书写。 这些字符可根据它们的上下文进行组合或更改。 同希伯来语一样, 印地语文本不区分大小写字母。

键盘差异

并非美国键盘上的所有字符都在其它键盘中出现。 同样,其它键盘经常包含许多在美国键盘上看不到的字符。


注意:

在 SPARCTM 机器上,书写键可用于生成所支持的任何 ISO8859 字符集中的任何带有音调符号的拉丁字符。

书写键可在基于拉丁文的语言环境中使用,但不能用于朝鲜语、中文或日语语言环境中(UTF-8 语言环境除外)。

由于输入由 Solaris 操作环境处理,因此可使用任何键盘输入任何语言环境中的字符。


纸张大小的差异

在每个国家/地区中,经常使用几种纸张大小。 通常情况下,其中的某个大小要比其它的大小更通用。 大多数国家/地区都遵循 ISO 标准 216: “书写纸和某些种类的打印材质-缩减大小-A 和 B 大小系列。 ”

国际化应用程序不应对可以使用的页大小进行假设。 Solaris 系统不支持对输出页大小进行跟踪。 由应用程序负责跟踪输出页大小。 下表显示了通用的国际页大小。

表 1–7 通用国际页大小

纸型 

尺寸 

国家/地区 

ISO A4 

21.0 厘米 X 29.7 厘米  

除美国以外的任何地方。 

ISO A5 

14.8 厘米 X 21.0 厘米 

除美国以外的任何地方。  

JIS B4 

25.9 厘米 X 36.65 厘米 

日本  

JIS B5 

18.36 厘米 X 25.9 厘米 

日本 

美国信函  

8.5 英寸 X 11 英寸 

美国和加拿大 

美国标准 

8.5 英寸 X 14 英寸 

美国和加拿大