目录
一个应用软件的 多语言化 (M17N)或本地语言支持,通过 2 个步骤完成。
国际化 (I18N): 使一个软件能够处理多个语言环境。
本地化 (L10N):使一个软件处理一个特定的语言环境。
|
提示 |
|---|---|
|
在 multilingualization(多语言化)、internationalization(国际化)和 localization(本地化)中,有17, 18, 或 10 个字母在"m" 和 "n", "i" 和 "n", 或 "l" 和 "n"中间,它们相应表示为 M17N, I18N 和 L10N。细节参见 国际化和本地化 。 |
程序支持国际化的行为,是通过配置环境变量 "$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" 章节。
sort(1) 和 ls(1)的字符排序受语言环境 locale 影响。导出
LANG=en_US.UTF-8,排序用字典
A->a->B->b...->Z->z 顺序,而导出
LANG=C.UTF-8,排序使用 ASCII 二进制
A->B->...->Z->a->b... 顺序。
ls(1) 的日期格式受语言环境影响(参见 第 9.3.4 节 “定制时间和日期的显示”)。
date(1)程序的日期格式受语言环境的影响。例如:
$ 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 语言环境。
键盘系统能够在系统的不同层级配置。
Linux 内核: keyboard(5)
X 服务端:
setxkbmap(1)、xkeyboard-config(5)、环境变量
XMODIFIERS
GUI(图形用户界面)桌面环境:输入法框架: ibus, fcitx5
应用层:环境变量设置它的输入源:GTK_IM_MODULE、QT_IM_MODULE、QT_IM_MODULES……
输入方式框架(IM)组成:
输入方式引擎(IME):实际的输入方式
配置:处理 IBus 和其它服务的配置,比如 IME 插件的配置
面板:用户界面,比如语言栏和候选表
输入多种语言到应用程序的处理流程大致如下:
Keyboard UI panel Configuration Application
| ^ | | ^ ^
v | v v | |
Linux kernel -> Input method engine (IME) -+-> Gtk, Qt ---+ |
| ^ | |
| | +-> X11, Wayland -+
v |
IME plugin (ibus-mozc, ...)
Debian 系统可以使用 keyboard-configuration 软件包配置多个国际化键盘布局。
# dpkg-reconfigure keyboard-configuration
对于 Linux 控制台和 X 窗口系统,这将更新在
"/etc/default/keyboard"里的配置参数。许多非 ASCII
字符,包括许多欧洲语言使用的重音字符,可以使用 死键、AltGr 键 和 组合键
来输入它们。
|
注意 |
|---|---|
|
如果 ibus 激活,即使在基于传统的 X 的桌面环境下,通过 |
不像 X 窗口协议,Wayland 核心协议甚至不支持重音字符输入。流行的 Wayland 合成器,比如 GNOME 的 Mutter 或 KDE 的 KWin,实现了用于文本输入的
text-input-unstable-v3 扩展协议(参见 当前 Wayland 协议和它们支持的状态)。
text-input-unstable-v3 协议和 Wayland 输入法一起工作得很好(参见 Wayland 输入法项目post-mortem)。
大部分使用 GTK 或 Qt 图形库构建的GUI(图形用户界面)应用程序支持这个
text-input-unstable-v3。
流行的输入法引擎 Input Method Engines (IME),比如 IBus 或
Fcitx (版本 5),能够和这个
text-input-unstable-v3 一起工作。
输入法引擎(IME)使用插件来支持多种语言的文本输入。
最近的输入法引擎集成了 "X Keyboard Extension
(XKB)",功能和 setxkbmap 类似,之前是由 X
窗口提供在欧洲语言中输入重音字符支持。
对于 GNOME,"ibus" 是默认的输入法引擎,它是通过 GNOME 的软件包依赖自动安装的。
大部分多语言键盘输入特性,能够从 "GNOME 设置" 或 "GNOME 调整"中配置。
一些多语言键盘输入特性可能需要从 ibus-setup(1) 命令来配置。
存在 表情符号 键盘输入, 通过按 SUPER-."
(同时按住 Windows 键和句号键),接着一个用于每个表情的关键字和空格键。
下面是 IBus 和它的插件软件包列表。
表 8.1. IBus 和它的插件软件包列表
| 软件包 | 流行度 | 大小 | 支持的语言环境 |
|---|---|---|---|
| ibus | V:210, I:250 | 1828 | 使用 dbus 的输入方式框架 |
| ibus-mozc | V:2.2, I:3.9 | 979 | 日文 |
| ibus-anthy | V:0.5, I:1.2 | 8958 | 日文 |
| ibus-skk | V:0.05, I:0.16 | 242 | 日文 |
| ibus-kkc | V:0.04, I:0.17 | 206 | 日文 |
| ibus-libpinyin | V:1.1, I:5.1 | 123 | 中文(zh_CN) |
| ibus-chewing | V:0.16, I:0.84 | 298 | 繁体中文(zh_TW) |
| ibus-libzhuyin | V:0.00, I:0.12 | 41021 | 繁体中文(zh_TW) |
| ibus-rime | V:0.26, I:0.49 | 76 | 中文(zh_CN/zh_TW) |
| ibus-cangjie | V:0.01, I:0.11 | 235 | 中文(zh_HK) |
| ibus-hangul | V:0.3, I:2.0 | 261 | 韩文 |
| ibus-libthai | V:0.00, I:0.04 | 84 | 泰文 |
| ibus-table-thai | I:0.05 | 59 | 泰文 |
| ibus-unikey | V:0.18, I:0.38 | 286 | 越南语 |
| keyman | V:0.00, I:0.12 | 507 | 多语言:Keyman 插件,超过 2000 种语言 |
| ibus-table | V:0.1, I:1.0 | 2364 | IBus 表插件 |
| ibus-m17n | V:0.2, I:1.9 | 373 | 多语言:印度语、阿拉伯语和其它 |
Fcitx(版本号5)输入法框架在中国广受欢迎并与"ibus"兼容。
下面是"fcitx5"和它的插件软件包列表。
表 8.2. Fcitx5 和它的插件软件包列表
| 软件包 | 流行度 | 大小 | 支持的语言环境 |
|---|---|---|---|
| fcitx5 | V:8, I:12 | 761 | 输入方式框架和"ibus"兼容 |
| fcitx5-mozc | V:1.1, I:1.8 | 1265 | 日文 |
| fcitx5-anthy | V:0.07, I:0.21 | 808 | 日文 |
| fcitx5-skk | V:0.06, I:0.17 | 369 | 日文 |
| fcitx5-kkc | V:0.01, I:0.07 | 416 | 日文 |
| fcitx5-chinese-addons | I:9.0 | 17 | 中文(zh_* 的元软件包) |
| fcitx5-pinyin | V:3.9, I:9.4 | 996 | 中文(zh_CN) |
| fcitx5-chewing | V:0.24, I:0.93 | 217 | 繁体中文(zh_TW) |
| fcitx5-zhuyin | I:0.07 | 41051 | 繁体中文(zh_TW) |
| fcitx5-rime | V:0.45, I:0.90 | 371 | 中文(zh_CN/zh_TW) |
| fcitx5-table-cangjie-large | I:0.12 | 1292 | 中文(zh_HK) |
| fcitx5-hangul | V:0.11, I:0.25 | 235 | 韩文 |
| fcitx5-libthai | I:0.04 | 119 | 泰文 |
| fcitx5-table-thai | I:0.07 | 34 | 泰文 |
| fcitx5-unikey | V:0.09, I:0.20 | 588 | 越南语 |
| fcitx5-m17n | V:0.16, I:0.58 | 259 | 多语言:印度语、阿拉伯语和其它 |
| fcitx5-table | V:0.3, I:9.3 | 417 | fcitx5 表插件 |
| fcitx5-keyman | V:0.04, I:0.05 | 235 | 多语言:Keyman 插件,超过 2000 种语言 |
我发现在英语环境("en_US.UTF-8")下启动日文输入法非常有用. 下面是使用 IBus 的做法:
安装日文输入法软件包 ibus-mozc(或 ibus-anthy )。
通用:执行 ibus-setup(1) → 选择 "Input Method" → 单击
"Add" → "Japanese" → "Mozc (or Anthy)" → 单击 "Add"
GNOME: 选择 "Settings" → "Keyboard" → "Input Sources" → 在"Input Sources"中单击
"+" → "Japanese" → "Mozc (或 Anthy)", 然后单击"Add"。
你可以选择许多输入源。
重新登录用户账户。
右键单击 GUI 工具条图标,设置每一个输入源。
使用 SUPER-SPACE 在安装的输入法之间进行切换. (SUPER 键通常是 Windows 键.)
|
提示 |
|---|---|
|
如果你希望在日本物理键盘(shift- |
对于 Wayland:
im-config 软件包没有做任何事情,能够被安全的移除。
你也许不需要设置环境变量,除非为了向后兼容性等原因。
如果你需要设置环境变量,创建一个类似
"~/.config/environment.d/50-input-method.conf " 的文件来设置它们。
对于 X Windows:
安装 im-config 软件包。
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 字符。(原始字体数据的编码会被处理,并对用户来说是透明的。)
Debian 系统可以使用 console-setup 软件包配置多个国际化控制台布局。
# dpkg-reconfigure console-setup
对于 Linux 控制台和 X 窗口系统,这将更新在"/etc/default/console-setup"
里的配置参数来显示许多非 ASCII 字符,包括许多欧洲语言使用的重音字符,都能够使其存在。
有几个组件可以用来配置字符控制台和 ncurses(3) 系统功能。
“/etc/terminfo/*/*” 文件(terminfo(5))
“$TERM” 环境变量(term(7))
如果 xterm 的 terminfo 对非 Debian 的
xterm 不起作用,则当你从远程登录到 Debian 系统时,你需要改变你的终端类型
“$TERM”,从 “xterm” 更改为功能受限的版本(例如
“xterm-r6”)。更多内容参见
“/usr/share/doc/libncurses5/FAQ”。“dumb”
是 “$TERM” 中最通用的。
在东亚语言环境下,方框绘制、希腊字符和西里尔字符可能会显示得比你预期的样子更宽,这样会导致终端输出排列不再整齐(参见 Unicode 标准附录 #11,4.2 Ambiguous 字符)。
您可以绕过这个问题:
gnome-terminal:首选项 → 配置文件 → 配置名 →
兼容性 → 宽度有歧义的字符 → 窄
ncurses:设置环境变量 export
NCURSES_NO_UTF8_ACS=0。