国际语言环境指南

第 1 章 Solaris 国际化概述

本章介绍 Solaris 国际化和本地化的新增特性和重要概念。本章包含下列主题。

关于 Solaris 国际化体系结构

当前 Solaris 发行版包含了许多新特性,包括对 UTF-8 语言环境的 Unicode 4.0 支持,增强了键盘支持并改进了 mp 打印过滤器的几项功能。

Solaris 国际化体系结构简化了世界范围内的应用程序和语言服务的开发、部署和管理。一个多语种产品能对 39 种不同语言和 162 种语言环境提供支持。另外,还支持泰语和印度语书写体所需的复杂文本布局环境。也支持阿拉伯语和希伯来语等语言的双向文本功能。

为许多不同 Solaris 语言环境提供了输入法、字符集、编码集转换和其他与语言相关的特性。您可以通过下列标准 API 在多语言环境中部署应用程序。 您还可以定制语言属性,更改转换器表或在 Solaris 环境中添加新输入法编辑器。

Solaris X 全球化框架的源代码于 2000 年秋季向开放源代码社区发布。此发行版使您能采用通用的引用实现来增强全球应用程序的兼容性和互操作性。独立于编码集的全球化方法使您能在当地语言和和 Unicode 语言环境中进行操作。Solaris 框架提供了跨平台伸缩的能力。一组丰富的数据转换器确保了在各种编码和不同第三方平台之间的互操作性。

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

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

下列新特性可以在当前 Solaris 发行版中获得:

国际化和本地化概述

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

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

国际化的基本步骤

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

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

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

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

上文介绍了此图形。

Solaris 界面中的本地化功能

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

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

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

什么是语言环境?

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

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

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

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

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

语言环境命名惯例如下:

语言[_地区][.代码集] [@modifier]

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

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

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

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

C 语言环境-缺省的语言环境

C 语言环境,也称为 POSIX 语言环境,是所有 POSIX 兼容系统的 POSIX 系统的缺省语言环境。Solaris 操作系统是 POSIX 系统。单个 UNIX 规范,版本 3,定义 C 语言环境。请进行注册以在下列网站读取和下载规范:http://www.unix.org/version3/online.html.

您可以采用两种方法中的一种指定在 C 语言环境中运行的国际化程序:

要检查终端环境中的当前语言环境设置,请运行 locale(1) 命令。

system% locale

完全语言环境和部分语言环境

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

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

所有部分语言环境都可从 Software CD 中获得。信息翻译可从 Languages 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–2 国际时间格式

语言环境 

格式 

加拿大语 

23:59 

芬兰语 

23.59 

德语 

23.59 Uhr 

挪威语 

23.59 

泰语 

23:59 

英国英语 

23:59 

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

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

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

日期格式

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

表 1–3 国际日期格式

语言环境 

惯例 

实例 

加拿大语(英语) 

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–4 国际数字惯例

语言环境 

较大数字 

加拿大语(英语) 

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–5 国际货币惯例

语言环境 

货币 

实例 

加拿大语(英语) 

美元 ($) 

$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

当前发行版支持欧元。本地货币符号仍然可用,以保持向后兼容性。

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

地区 

语言环境名称 

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 

爱沙尼亚 

et_EE.ISO8859-15

8859-15 

芬兰 

fi_FI.ISO8859-15

8859-15 

法国 

fr_FR.ISO8859-15

8859-15 

德国 

de_DE.ISO8859-15

8859-15 

大不列颠 

en_GB.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 

西班牙 

es_ES.ISO8859-15

8859-15 

瑞典 

sv_SE.ISO8859-15

8859-15 

美国 

en_US.ISO8859-15

8859-15 

欧洲语言环境基于 ISO8859-15 代码集。

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

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

表 1–7 德国语言环境和相应的 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 个字符,而某些语言却包含更多字符。例如,日语可以包含 20,000 多个字符,而中文可能包含比这一数据还要多的字符。

西欧字母表

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

日语文本

日语文本由三种不同的书写体混合而成:

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

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

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

朝鲜语文本

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

泰语文本

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

中文文本

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

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

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

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

希伯来语文本

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

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

印度语文本

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

键盘差异

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

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


注意 –

在 SPARC® 机器上,书写键可用于生成所支持的任何 ISO8859 字符集中的任何带有音调符号的拉丁字符。书写键可在基于拉丁文的语言环境中使用,但不能用于朝鲜语、中文或日语语言环境(UTF-8 语言环境除外)。


纸张大小的差异

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

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

表 1–8 通用国际页大小

纸型 

尺寸 

国家/地区 

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 英寸 

美国和加拿大