10.4. 语言和国家/地区特定的设置

SUSE Linux 在很大程度上实施了国际化,可通过灵活的方式进行修改以满足本地需要。换句话说,国际化 (I18N) 允许特定的本地化 (L10N)。I18N 和 L10N 这两个缩写词使用原单词的第一个和最后一个字母,中间的数字表示省略的字母数。

设置是通过文件 /etc/sysconfig/language 中定义的 LC_ 变量进行的。这不仅指本地语言支持,还指讯息(语言)、字符集排序顺序日期和时间数字货币等类别。这些类别中的每一种都可以使用其自己的变量直接定义或使用文件 language 中的主变量间接定义(请参见手册页 man locale)。

RC_LC_MESSAGESRC_LC_CTYPERC_LC_COLLATERC_LC_TIMERC_LC_NUMERICRC_LC_MONETARY

这些变量以不带 RC_ 前缀的形式传递到 shell,它们代表所列出的类别。下面列出了相关 shell 配置文件。可以使用命令 locale 显示当前设置。

RC_LC_ALL

此变量(如果设置)将覆盖上述变量的值。

RC_LANG

如果未设置上述的任何变量,则这是后备变量。默认情况下,SUSE Linux 只设置 RC_LANG。这便于用户输入他们自己的值。

ROOT_USES_LANG

yesno 变量。如果将其设置为 no,则 root 用户始终在 POSIX 环境中工作。

这些变量可通过 YaST sysconfig 编辑器进行设置(请参见第 8.3.1 节 “使用 YaST sysconfig 编辑器更改系统配置”)。此类变量的值中包含语言代码、国家/地区代码、编码和修饰符。各部分之间通过特殊字符连接:

  LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]

10.4.1. 一些示例

语言和国家/地区代码始终应该一起设置。语言设置遵循 ISO 639 标准(可从 http://www.evertype.com/standards/iso639/iso639-en.htmlhttp://www.loc.gov/standards/iso639-2/ 上获取)。国家/地区代码在 ISO 3166(可从 http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html 上获取)中列出。

只有设置可以在 /usr/lib/locale 中找到其可用说明文件的值才有意义。可以在 /usr/share/i18n 中的文件中使用命令 localedef 创建其它说明文件。说明文件是 glibc-i18ndata 包的一部分。可以使用以下命令创建 en_US.UTF-8(用于英国英语和美国英语)的说明文件:

localedef -i en_US -f UTF-8 en_US.UTF-8
LANG=en_US.UTF-8

如果在安装过程中选择的是美国英语,则这是默认设置。如果选择了其它语言,则将支持该语言,但仍使用 UTF-8 作为字符编码。

LANG=en_US.ISO-8859-1

这会将语言设置为英语,将国家/地区设置为美国,将字符集设置为 ISO-8859-1。此字符集不支持欧元符号,但它有时可用于尚未进行更新以支持 UTF-8 的程序。随后,Emacs 等程序将对定义字符集的字符串(在本例中为 ISO-8859-1)进行求值。

LANG=en_IE@euro

上例将欧元符号显式包含在语言设置中。严格来说,此设置目前已过时,因为 UTF-8 也包含欧元符号。该设置仅在应用程序不支持 UTF-8 但支持 ISO-8859-15 时才有用。

SUSEconfig 读取 /etc/sysconfig/language 中的变量并将必需的更改写入 /etc/SuSEconfig/profile/etc/SuSEconfig/csh.cshrc/etc/SuSEconfig/profile/etc/profile 读取或用作其数据的来源/etc/SuSEconfig/csh.cshrc 被用作 /etc/csh.cshrc 的数据来源。这使设置在整个系统范围内可用。

用户可以通过相应地编译他们的 ~/.bashrc 覆盖系统默认值。例如,如果不想将整个系统范围的 en_US 用于程序讯息,请包括 LC_MESSAGES=es_ES,这样讯息将以西班牙语显示。

10.4.2. ~/.i18n 中的语言环境设置

如果对语言环境系统默认值不满意,请更改 ~/.i18n 中的设置。~/.i18n 中的项覆盖来自 /etc/sysconfig/language 中的系统默认值。使用相同的变量名,但是不使用 RC_ 名称空间前缀,例如,使用 LANG 而不是 RC_LANG

10.4.3. 语言支持的设置

讯息类别中的文件通常只储存在对应的语言目录(例如 en)中以保留后备。如果将 LANG 设置为 en_US 并且 /usr/share/locale/en_US/LC_MESSAGES 中的讯息文件不存在,则它将使用 /usr/share/locale/en/LC_MESSAGES

还可以定义后备语言,例如,将布列塔尼语作为法语的后备语言,将加利西亚语作为葡萄牙语的后备语言。

LANGUAGE="br_FR:fr_FR"

LANGUAGE="gl_ES:es_ES:pt_PT"

如果需要,可改用挪威语变体 Nynorsk 和 Bokmål(将其它后备语言设置为 no):

LANG="nn_NO"

LANGUAGE="nn_NO:nb_NO:no"

LANG="nb_NO"

LANGUAGE="nb_NO:nn_NO:no"

请注意,在挪威语中,LC_TIME 的处理方式也有所不同。

可能会出现一个问题,那就是无法正确识别用于分隔成组数位的分隔符。如果 LANG 设置为仅两个字母的语言代码(如 de),但使用的定义文件 glibc 位于 /usr/share/lib/de_DE/LC_NUMERIC,则将出现此问题。因此必须将 LC_NUMERIC 设置为 de_DE 以使系统能够识别出分隔符定义。

10.4.4. 参考信息

  • GNU C 库参考手册》中的“区域设置和国际化”一章。它包含在 glibc-info 中。

  • Markus Kuhn 编写的 Unix/Linux 的 UTF-8 和 Unicode 常见问题解答,当前位于 http://www.cl.cam.ac.uk/~mgk25/unicode.html

  • Bruno Haible 编写的 Unicode-Howto/usr/share/doc/howto/en/html/Unicode-HOWTO.html