目录
一个应用软件的 多语言化 (M17N)或本地语言支持,通过 2 个步骤完成。
国际化 (I18N): 使一个软件能够处理多个语言环境。
本地化 (L10N):使一个软件处理一个特定的语言环境。
![]() |
提示 |
---|---|
There are 17, 18, or 10 letters between "m" and "n", "i" and "n", or "l" and "n" in multilingualization, internationalization, and localization which correspond to M17N, I18N, and L10N. See Internationalization and localization for details. |
程序支持国际化的行为,是通过配置环境变量 "$LANG
"来支持本地化。语言环境的实际支持,依赖
libc
库提供的特性,并要求安装 locales
或
locales-all
软件包。 locales
软件包需要被适当的初始化。
如果 locales
或 locales-all
软件包均没有安装,支持语言环境的特性丢失,系统使用 US 英语消息,并按 ASCII 处理数据。这个行为和 "$LANG
" 被设置为
"LANG=
"、"LANG=C
" 或
"LANG=POSIX
" 相同。
GNOME 和 KDE 等现代软件是多语言的。他们通过处理 UTF-8 数据来实现国际化,并通过
gettext
(1) 架构提供翻译信息来本地化。翻译信息可以由独立的本地化软件包来提供。
目前的 Debian 桌面 GUI(图形用户界面)系统通常在 GUI 环境中设置语言环境为
"LANG=xx_YY.UTF-8
"。这里,"xx
" 是 ISO 639 语言代码 ,"YY
" 是
ISO 3166 国家地区代码。这些值由配置桌面的 GUI
对话框来设置,并改变程序的行为。参见 第 1.5.2 节 ““$LANG
”变量”
最简单的文本数据表达是 ASCII,它对英语是足够的,少于 127 个字符(使用 7 位描述)。
即使纯英文文本也可能包含非 ASCII 字符,例如微微卷曲的左右引号在 ASCII 中是不可用的。
“double quoted text” is not "double quoted ASCII" ‘single quoted text’ is not 'single quoted ASCII'
为了支持更多字符,许多字符集和编码系统被用来支持多语言。(参见 表 11.2 “编码值和用法的列表”)。
Unicode 字符集可以用 21 位码点范围来显示几乎所有人类已知的字符(例如,十六进制的 0 到 10FFFF)。
文本编码系统 UTF-8 将 Unicode 码点适配到一个合理的 8 位数据流,并大部分兼容 ASCII 数据处理系统。这个使 UTF-8 作为现代推荐的选择。UTF 表示 Unicode 转换格式(Unicode Transformation Format)。当 ASCII 纯文本数据转换为 UTF-8 数据,它有和原始 ASCII 完全一样的内容和大小。所以配置 UTF-8 语言环境不会有任何丢失。
在 UTF-8
语言环境下兼容的应用程序,你可以显示和编辑外语文本数据,在所要求的字体和输入法安装和启用后。例如在"LANG=fr_FR.UTF-8
"语言环境下,gedit
(1)
(GNOME 桌面的文本编辑器) 能够显示和编辑中文字符文本数据,而显示的菜单是法语。
![]() |
提示 |
---|---|
新标准的
" |
![]() |
注意 |
---|---|
一些程序在支持 I8N 后会消耗更多的内存。这是因为它们为了速度优化,而在内部使用 UTF-32(UCS4) 来支持 Unicode,并且每个独立于语言环境所选的 ASCII 字符数据都会消耗 4 个字节。再一次地,使用 UTF-8 语言环境并不会使你损失什么。 |
为了让系统访问某一语言环境,语言环境数据必须从语言环境数据库中编译。
locales
软件包 没有
包含预先编译的语言环境数据。你需要按下面的方法配置:
# dpkg-reconfigure locales
该过程包含 2 个步骤。
选择所有需要的语言环境数据编译为二进制形式。(请确认至少包含一个 UTF-8 语言环境 )
通过创建 “/etc/default/locale
” 来设置系统默认的语言环境值给 PAM 使用(参见 第 4.5 节 “PAM 和 NSS”)。
设置在 "/etc/default/locale
" 里的系统范围的默认语言环境,可以被
GUI(图形用户界面)应用程序的 GUI 配置覆盖。
![]() |
注意 |
---|---|
所使用的确切传统编码系统可以通过 “ |
locales-all
软件包有所有预编译的语言环境数据,但是不创建"/etc/default/locale
",你可能还需要安装
locales
软件包。
![]() |
提示 |
---|---|
一些 Debian 系发行版的 |
对于跨平台的数据交换(参见 第 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
通过 $LANGUAGE
环境变量,GNU gettext 能够适应翻译语言的优先级列表。例如:
$ export LANGUAGE="pt:pt_BR:es:it:fr"
获取更多信息,参见 info gettext
,阅读 "The LANGUAGE variable" 章节。
The sort order of characters with sort
(1) and
ls
(1) are affected by the locale. Exporting
LANG=en_US.UTF-8
sorts in the dictionary
A->a->B->b...->Z->z
order, while exporting
LANG=C.UTF-8
sorts in ASCII binary
A->B->...->Z->a->b...
order.
The date format of ls
(1) is affected by the locale (see
第 9.3.4 节 “定制时间和日期的显示”).
The date format of date
(1) is affected by the locale.
For example:
$ unset LC_ALL $ LANG=en_US.UTF-8 date Thu Dec 24 08:30:00 PM JST 2023 $ LANG=en_GB.UTF-8 date Thu 24 Dec 20:30:10 JST 2023 $ LANG=es_ES.UTF-8 date jue 24 dic 2023 20:30:20 JST $ LC_TIME=en_DK.UTF-8 date 2023-12-24T20:30:30 JST
不同语言环境的数字标点不一样.比如说,英语语言环境中, 一千点一显示为
"1,000.1
",而在德语语言环境中,它显示为 "1.000,1
".
你可以在电子表格程序里面看到这个不同。
"$LANG
" 环境变量的每一个细节特征能够通过设置 "$LC_*
"
变量来覆盖。这些环境变量又能够通过设置 $LC_ALL
"变量而被再次覆盖。细节参见
locale
(7) man 手册页。除非你有强烈的理由创建复杂的配置,请远离他们并只使用
"$LANG
" 变量来设置一个 UTF-8 语言环境。
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 键 和 组合键 来输入它们。
Wayland 桌面系统上的 GNOME, 第 8.2.1 节 “Linux 控制台和 X 窗口的键盘输入”
不支持非英语的欧洲语言。IBus 不仅支持亚洲语言,也支持欧洲语言。GNOME
桌面环境的软件包依赖关系通过"gnome-shell
"推荐"ibus
"
。"ibus
" 的代码已经更新集成 setxkbmap
和 XKB
选项功能。对多语言键盘输入,你需要从 "GNOME Settings" 或 "GNOME Tweaks" 配置
ibus
。
![]() |
注意 |
---|---|
如果 ibus 激活,即使在基于传统的 X 的桌面环境下,通过 |
因 GNOME 桌面环境通过"gnome-shell
"
推荐"ibus
","ibus
"对于输入法来说,是一个好的选择。
输入多种语言到应用程序的处理流程如下:
Keyboard Application | ^ | | +-> Linux kernel -> Input method (ibus) -> Gtk, Qt, X, Wayland +-- Engine--+
下面是 IBus 和它的引擎软件包列表。
表 8.1. IBus 和它的引擎软件包列表
软件包 | 流行度 | 大小 | 支持的语言环境 |
---|---|---|---|
ibus | V:195, I:239 | 1723 | 使用 dbus 的输入方式框架 |
ibus-mozc | V:1, I:3 | 935 | 日文 |
ibus-anthy | V:0, I:1 | 8856 | 同上 |
ibus-skk | V:0, I:0 | 242 | 同上 |
ibus-kkc | V:0, I:0 | 210 | 同上 |
ibus-libpinyin | V:1, I:3 | 2760 | 中文(zh_CN) |
ibus-chewing | V:0, I:0 | 422 | 中文 (zh_TW) |
ibus-libzhuyin | V:0, I:0 | 40987 | 中文 (zh_TW) |
ibus-rime | V:0, I:0 | 73 | 中文( zh_CN/zh_TW) |
ibus-cangjie | V:0, I:0 | 119 | 中文 (zh_HK) |
ibus-hangul | V:0, I:2 | 264 | 韩文 |
ibus-libthai | I:0 | 90 | 泰文 |
ibus-table-thai | I:0 | 58 | 泰文 |
ibus-unikey | V:0, I:0 | 318 | 越南语 |
ibus-keyman | V:0, I:0 | 138 | 多语言:Keyman 引擎,超过 2000 种语言 |
ibus-table | V:0, I:1 | 2176 | IBus 表引擎 |
ibus-m17n | V:0, I:1 | 388 | 多语言:印度语、阿拉伯语和其它 |
plasma-widgets-addons | V:47, I:97 | 1992 | Plasma 5 的额外组件,包含有键盘指示器 |
![]() |
注意 |
---|---|
对于中文," |
我发现在英语环境("en_US.UTF-8
")下启动日文输入法非常有用. 下面是在 Wayland 上的
GNOME下使用 IBus 的做法:
安装日文输入法软件包 ibus-mozc
(或 ibus-anthy
),以及
im-config
等推荐的软件包。
选择 "Settings" → "Keyboard" → "Input Sources" → 在"Input Sources"中单击
"+
" → "Japanese" → "Japanese mozc (or anthy)",
然后单击"Add"。如果它没有被激活。
你可以选择许多输入源。
重新登录用户账户。
右键单击 GUI 工具条图标,设置每一个输入源。
使用 SUPER-SPACE 在安装的输入法之间进行切换. (SUPER 键通常是 Windows 键.)
![]() |
提示 |
---|---|
如果你希望在日本物理键盘(shift- |
im-config
(8) 的用户界面菜单入口是 "Input method"。
此外,从用户的 shell 来执行 "im-config
" 。
如果命令从 root 账户或 非 root 账号执行,im-config
(8) 表现会有所不同。
im-config
(8) 让最佳的输入法作为系统默认而不需要用户干预。
Linux 控制台只能显示有限的字符。(你需要使用特殊的终端程序,例如 jfbterm
(1),从而在非 GUI
控制台中显示非欧洲语言。)
只要需要的字体安装并被启用,GUI(图形用户界面)环境(第 7 章 GUI(图形用户界面)系统)能够显示任意 UTF-8 字符。(原始字体数据的编码会被处理,并对用户来说是透明的。)
在东亚语言环境下,方框绘制、希腊字符和西里尔字符可能会显示得比你预期的样子更宽,这样会导致终端输出排列不再整齐(参见 Unicode 标准附录 #11)。
您可以绕过这个问题:
gnome-terminal
:首选项 → 配置文件 → 配置名 →
兼容性 → 宽度有歧义的字符 → 窄
ncurses
:设置环境变量 export
NCURSES_NO_UTF8_ACS=0
。