目录
一个应用软件的 多语言化 (M17N)或本地语言支持,通过 2 个步骤完成。
国际化 (I18N): 使一个软件能够处理多个语言环境。
本地化 (L10N):使一个软件处理一个特定的语言环境。
提示 | |
---|---|
在 multilingualization(多语言化)、internationalization(国际化)和 localization(本地化)中,有17, 18, 或 10 个字母在"m" 和 "n", "i" 和 "n", 或 "l" 和 "n"中间,它们相应表示为 M17N, I18N 和 L10N. |
GNOME 和 KDE 等现代软件是多语言的。他们通过处理 UTF-8 数据来实现国际化,并通过 gettext(1) 架构提供翻译信息来本地化。翻译信息可以由独立的本地化软件包来提供。翻译信息易于选择使用,通过给相关的环境变量设置适当的语言环境即可。
最简单的文本数据表示方法是 ASCII,使用少于 127 个字符 (用 7 位表示),这对英语足够了。为了支持用于国际化的更多字符,人们发明了许多字符编码系统。现代知名的编码系统是 UTF-8,它可以处理人类所知的几乎所有字符(参见 第 8.3.1 节 “编码的基础知识”).
细节请参见 i18n 介绍.
有本地化硬件配置数据便能支持国际化硬件。
警告 | |
---|---|
本章是基于 2013 年发布的 Debian 7.0 ( |
Debian 系统可以使用 keyboard-configuration
和
console-setup
软件包配置多个国际化键盘布局。
# dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup
这将配置 Linux 控制台和 X 窗口的键盘,并更新 “/etc/default/keyboard
” 和
“/etc/default/console-setup
” 中的配置参数。这也可以用来配置 Linux
控制台的字体。
许多非 ASCII 字符,包括许多欧洲语言使用的重音字符,可以使用 死键、AltGr 键 和 组合键 来输入它们。
对于亚洲语言,你需要更复杂的输入法支持,例如下面将要讨论的 IBus。
输入多种语言到应用程序的处理流程如下:
键盘 应用程序 | ^ | | +-> Linux 内核 -> 输入法 -> Gtk、Qt、或 X
通过 im-config
使用 IBus
家族的软件包可以简单地为 Debian 系统建立多语种的输入。下面列出了一些 IBus 软件包。
表 8.1. IBus 支持的输入法
软件包 | 流行度 | 大小 | 支持的语言环境 |
---|---|---|---|
ibus | V:7, I:10 | 1937 | 使用 dbus 的输入方式框架 |
ibus-mozc | V:0, I:1 | 879 | 日文 |
ibus-anthy | V:1, I:2 | 746 | 同上 |
ibus-kkc | V:0, I:0 | 266 | 同上 |
ibus-skk | V:0, I:0 | 274 | 同上 |
ibus-pinyin | V:0, I:2 | 1402 | 中文(zh_CN) |
ibus-chewing | V:0, I:0 | 388 | 中文 (zh_TW) |
ibus-hangul | V:0, I:0 | 224 | 韩文 |
ibus-table | V:0, I:1 | 821 | IBus 表引擎 |
ibus-table-thai | I:0 | 69 | 泰文 |
ibus-unikey | V:0, I:0 | 239 | 越南语 |
ibus-m17n | V:0, I:0 | 163 | 多语言:印度语、阿拉伯语和其它 |
kinput2 方式和其它本地独立的亚洲经典输入法依旧存在,但不推荐在现代的 UTF-8 X 环境中使用。SCIM 和 uim 工具链是用于现代的 UTF-8 X 环境下的国际化输入法的较旧的方法。
I find the Japanese input method started under English environment
("en_US.UTF-8
") very useful. Here is how I did this with
IBus for GNOME3:
Install the Japanese input tool package ibus-anthy
with
its recommended packages such as im-config
.
Execute "im-config
" from user's shell and select
"ibus
" as the input method.
Select "Settings" → "Keyboard" → "Input Sources" → click
"+
" in "Input Sources" → "Japanese" → "Japanese (anthy)"
and click "Add".
Select "Japanese" and click "Add" to support the Japanese layout keyboard without character conversion. (You may chose as many input sources.)
Relogin to user's account.
Verify setting by "im-config
".
Setup input source by right clicking the GUI toolbar icon.
Switch among installed input sources by SUPER-SPACE. (SUPER is normally the Windows key.)
请注意以下几点。
im-config(8) behaves differently if command is executed from root or not.
im-config(8) enables the best input method on the system as default without any user actions.
The GUI menu entry for im-config(8) is disabled as default to prevent cluttering.
Linux 控制台只能显示有限的字符。(你需要使用特殊的终端程序,例如jfbterm(1),从而在非 X 控制台中显示非欧洲语言。)
X Window can display any characters in the UTF-8 as long as required font data exists. (The encoding of the original font data is taken care by the X Window System and transparent to the user.)
下面重点介绍在从 gdm3(1) 启动的 X 窗口环境下运行的应用程序的语言设置。
环境变量 “LANG=xx_YY.ZZZZ
” 将语言环境设置为语言代码
“xx
”、国家代码 “YY
” 和编码
“ZZZZ
”(参见 第 1.5.2 节 ““$LANG
”变量”)。
The current Debian system normally sets the locale as
"LANG=xx_YY.UTF-8
". This uses the UTF-8 encoding with the Unicode character set. This UTF-8 encoding system is a multibyte code system and
uses code points smartly. The ASCII data, which
consist only with 7-bit range codes, are always valid UTF-8 data consisting
only with 1 byte per character.
之前的 Debian 系统曾经将语言环境设置为 “LANG=C
” 或
“LANG=xx_YY
”(没有 “.UTF-8
”)。
“LANG=C
” 或 “LANG=POSIX
” 使用 ASCII 字符集。
“LANG=xx_YY
” 使用 Unix 的传统编码系统。
“LANG=xx_YY
” 所使用的确切传统编码系统可以通过
“/usr/share/i18n/SUPPORTED
”
来确认。例如,“en_US
” 使用 “ISO-8859-1
”
编码,“fr_FR@euro
” 使用 “ISO-8859-15
” 编码。
提示 | |
---|---|
编码值的含义,参见 表 11.2 “编码值和用法的列表”。 |
Unicode 字符集可以用从 0 到 10FFFF (十六进制)范围的码点来显示几乎所有人类已知的字符。它的存储至少需要 21 位。
文本编码系统 UTF-8 将 Unicode 码点适配到一个合理的 8 位数据流,并兼容 ASCII 数据处理系统。UTF 表示 Unicode 转换格式(Unicode Transformation Format)。
我建议在你的桌面使用 UTF-8 语言环境,例如
“LANG=zh_CN.UTF-8
”。语言环境的第一部分决定了应用程序中显示的信息。例如,“LANG=fr_FR.UTF-8
”
语言环境下的
gedit(1)(GNOME
桌面的文本编辑器),菜单是用法语显示的,但只要安装所需的字体和输入法就可以显示和编辑中文字符文本数据。
我还建议只使用 “$LANG
” 环境变量来设置语言环境。我没有看到在 UTF-8 语言环境下设置复杂的
“LC_*
” 变量组合有什么好处(参见
locale(1))。
即使纯英文文本也可能包含非 ASCII 字符,例如微微卷曲的左右引号在 ASCII 中是不可用的。
“双引号的文本” 并非 “双引号的 ASCII” ‘单引号的文本’ 并非 ‘单引号的 ASCII’
当纯 ASCII 文本数据转换为 UTF-8 后,它会具有与原本完全相同的内容和大小。因此使用 UTF-8 语言环境并不会使你损失什么。
一些程序在支持 I8N 后会消耗更多的内存。这是因为它们为了速度优化,而在内部使用 UTF-32(UCS4) 来支持 Unicode,并且每个独立于语言环境所选的 ASCII 字符数据都会消耗 4 个字节。再一次地,使用 UTF-8 语言环境并不会使你损失什么。
供应商指定的旧的非 UTF-8 编码系统在一些字符上往往有较小但恼人的不同,例如许多国家使用的字形。而使用了 UTF-8 系统的现代操作系统基本上能解决这行编码冲突问题。
为了使系统访问特定的语言环境,必须从语言环境数据库编译相应语言环境数据。(Debian 系统不带有所有提前编译的可用语言环境,除非你安装
locales-all
软件包。)所支持的可编译语言环境的完整列表位于
“/usr/share/i18n/SUPPORTED
”,它列出了所有准确的语言环境名称。下列命令列出已编译成二进制形式的所有可用的
UTF-8 语言环境。
$ locale -a | grep utf8
下列的命令会重新配置 locales
软件包。
# dpkg-reconfigure locales
该过程包含 3 个步骤。
更新可用的语言环境列表
将它们编译为二进制形式
在 “/etc/default/locale
” 设置系统默认的语言环境值给 PAM 使用(参见 第 4.5 节 “PAM 和 NSS”)
可用的语言环境列表应该包含 “en_US.UTF-8
” 和所有你感兴趣的带有
“UTF-8
” 的语言。
对于美式英语,推荐默认的语言环境为 “en_US.UTF-8
”。对于其它语言,请确保所选的语言环境带有
“UTF-8
”。这些设置中的任何一个都能够处理任何国际字符。
注意 | |
---|---|
虽然将语言环境设置为 “ |
“$LANG
” 环境变量的值由许多应用程序设置和改变。
login(1) 的 PAM 机制为本地 Linux 控制台程序进行了最初的设置
显示管理器的 PAM 机制为所有的 X 程序进行了最初的设置
ssh(1) 的 PAM 机制为远程控制台程序进行了最初的设置
一些显示管理器,例如 gdm3(1) 会为所有 X 程序改变设置
通过 “~/.xsessionrc
”,X 会话启动码会为所有 X 程序改变设置
shell 启动码,例如 “~/.bashrc
”,会为所有控制台程序改变设置
提示 | |
---|---|
将系统默认语言环境设置为 “ |
你可以像下面那样选择只用于 X 窗口的特定语言环境,而不管你的系统使用 PAM 定制(参见 第 4.5 节 “PAM 和 NSS”)的默认语言环境。
This environment should provide you with your best desktop experience with stability. You have access to the functioning character terminal with readable messages even when the X Window System is not working. This becomes essential for languages which use non-roman characters such as Chinese, Japanese, and Korean.
注意 | |
---|---|
改善 X 会话管理软件包可能会使另一种可用的方法,但请阅读下面的内容作为设置语言环境的通用和基础的方法。对于 gdm3(1),我们知道你能够通过它的菜单来选择 X 会话的语言环境。 |
在 PAM 配置文件中的下面这行定义了语言环境的文件位置,例如 “/etc/pam.d/gdm3
”。
auth required pam_env.so read_env=1 envfile=/etc/default/locale
将这行改成下面那样。
auth required pam_env.so read_env=1 envfile=/etc/default/locale-x
对于中文,建立一个带有 “-rw-r--r-- 1 root root
” 权限的
“/etc/default/locale-x
” 文件,并包含下面这行。
LANG="zh_CN.UTF-8"
保持用于其它程序的默认 “/etc/default/locale
” 文件有下面这行。
LANG="en_US.UTF-8"
这是定制语言环境最通用的技术,并且会使 gdm3(1) 本身的菜单选择对话框被本地化。
对于该情况的另一种解决方法是使用 “~/.xsessionrc
” 文件来改变语言环境。
对于跨平台的数据交换(参见 第 10.1.7 节 “可移动存储设备”),你需要使用特殊的编码挂载文件系统.举个例子,不使用选项时,mount(8) 假设 vfat 文件系统 使用 CP437. 你需要给文件名提供明确的挂载选项来使用UTF-8 或 CP932.
注意 | |
---|---|
在 GNOME 这类的现代桌面环境下,当自动挂载一个热拔插 U 盘时,你可以提供这样的挂载选项。右击桌面上的图标,点击 "Drive" , "Setting", 输入 "utf8" 到 "Mount options:". 当这个 U 盘下次挂载时,UTF-8 就可以了。 |
注意 | |
---|---|
如果你在升级一个系统,或者从老的非 UTF-8 系统迁移磁盘,非 ASCII 字符的文件名也许是使用老旧的 ISO-8859-1 或 eucJP 来编码. 请寻求文本转换工具把他们转换到 UTF-8. 参见 第 11.1 节 “文本数据转换工具”. |
在默认情况下,Samba 对新的客户端(Windows NT, 200x, XP)使用
Unicode,但对老的客户端(DOS 和 Windows 9x/Me)使用 CP850.可以在 "/etc/samba/smb.conf
"
文件里面,使用"dos charset
" 来改变老客户端的这个默认编码。比如说,CP932 表示为日语。
在 Debian 系统中显示的许多文档和文本信息有翻译存在,比如错误信息、标准程序输出、菜单和手册页。GNU gettext(1) 命令工具链是大部分翻译活动的后端工具。
aptitude(8) 里,"Tasks" → "Localization" 提供一个有用的二进制包扩展列表, 给应用程序增加本地化信息和提供翻译文档。
举个例子,你可以安装 manpages-<LANG>
包来获得本地化 man 手册页信息。从
"/usr/share/man/it/
" 来读取 <programname> 意大利语的 man
手册页 ,执行下面的操作。
LANG=it_IT.UTF-8 man <programname>
sort(1) 的字符排序,受 语言环境的影响. 西班牙语和英语语言环境排序是不一样的。
ls(1)
的日期格式受语言环境影响. "LANG=C ls -l
" 和
"LANG=en_US.UTF-8
" 的日期格式是不一样的(参见 第 9.2.5 节 “定制时间和日期的显示”).
不同语言环境的数字标点不一样.比如说,英语语言环境中, 一千点一显示为
"1,000.1
",而在德语语言环境中,它显示为 "1.000,1
".
你可以在电子表格程序里面看到这个不同。