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

该系统在很大程度上实现了国际化,可灵活地修改以满足本地需要。换句话说,国际化 (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

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

ROOT_USES_LANG

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

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

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

一些示例

语言和国家/地区代码始终应该一起设置。 语言设置遵循 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 中找到其可用描述文件的值才有意义。 可以使用命令 localedef 基于 /usr/share/i18n 中的文件创建更多描述文件;描述文件是 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 也可涵盖欧元符号。仅当应用程序支持 ISO-8859-15 而不是 UTF-8 时,它才有用。

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,这样消息将以西班牙语显示。

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

如果您对系统默认的区域设置不满意,请根据 Bash 脚本编写语法更改 ~/.i18n 中的设置。~/.i18n 中的项覆盖来自 /etc/sysconfig/language 中的系统默认值。使用相同的变量名而不使用 RC_ 名称空间前缀。例如,使用 LANG 而不是 RC_LANG

LANG=cs_CZ.UTF-8
LC_COLLATE=C

语言支持的设置

消息类别中的文件通常只储存在对应的语言目录(例如 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 和 Bokmal(将其他后备语言设置为 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 以使系统能够识别出分隔符定义。

有关详细信息

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

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

  • Unicode-Howto,作者 Bruno Haible:/usr/share/doc/howto/en/txt/Unicode-HOWTO.gz(包 howto)。