25.2.使用本地化¶
本地化设置主要基于三个部分:语言代码、国家代码(地区)和编码。本地化名称是由这些部分构成的,如下所示:
语言代码_国家代码(地区).编码
语言代码和国家代码用于确定国家(地区)和具体的语言变化。通用语言和国家(地区)代码提供了一些语言代码_国家(地区)代码的例子。
表 15. 常见的语言和国家(地区)代码
语言代码_国家(地区)代码 |
代指 |
---|---|
en_US |
英语,美国 |
ru_RU |
俄语,俄罗斯 |
zh_TW |
繁体中文,中国台湾 |
完整的可用语言列表可以通过输入以下内容找到:
% locale -a | more
要确定当前的地区设置。
% locale
特定语言的字符集,如 ISO8859-1、ISO8859-15、KOI8-R 和 CP437,在 multibyte(3) 中有说明。可以在 IANA 注册中心找到有效的字符集列表。
有些语言,如中文或日文,不能用 ASCII 字符表示,需要用宽字符或多字节字符进行扩展语言编码。宽字符或多字节编码的例子包括 EUC 和 Big5。老的应用程序可能会误认为这些编码是控制字符,而新的应用程序通常会识别这些字符。根据具体实现,用户可能需要编译软件以支持宽字符或多字节字符,或者对其进行正确的配置。
注意
FreeBSD 使用与 Xorg 兼容的地区编码。
本节的其余部分将说明在 FreeBSD 系统上配置 locale 的各种方法。下一节将讨论寻找和编译支持 i18n 的应用程序的注意事项。
25.2.1.为登录 shell 设置地区设置¶
地区设置是在用户的 ~/.login_conf 或用户 shell 的启动文件 ~/.profile,~/.bashrc,或 ~/.cshrc 中配置的。
有需要对两个环境变量进行设置:
LANG
,用于设置语言环境MM_CHARSET
,设置应用程序使用的 MIME 字符集
除了配置用户的 shell 之外,还应该为特定的应用程序配置和 Xorg 配置设置这些变量。
有两种方法可用于进行所需的变量分配:登录分级(推荐)和启动文件。接下来的两节将演示如何使用这两种方法。
25.2.1.1.登录分级¶
这第一种是推荐的方法,因为它为每个可能的 shell 都分配了所需的环境变量,如本地化名称和 MIME 字符集。这个设置可以由每个用户执行,也可由超级用户为所有用户配置。
这个最简单的例子在单个用户的主目录的 .login_conf 中为 Latin-1
编码设置了两个变量:
me:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:
下面是一个用户 ~/.login_conf 的例子,它为 BIG-5 编码的繁体中文设置了变量。因为有些应用程序不能正确地遵守中文、日文和韩文的地区变量,所以需要设置更多的变量:
#Users who do not wish to use monetary units or time formats
#of Taiwan can manually change each variable
me:\
:lang=zh_TW.Big5:\
:setenv=LC_ALL=zh_TW.Big5,LC_COLLATE=zh_TW.Big5,LC_CTYPE=zh_TW.Big5,LC_MESSAGES=zh_TW.Big5,LC_MONETARY=zh_TW.Big5,LC_NUMERIC=zh_TW.Big5,LC_TIME=zh_TW.Big5:\
另外,超级用户可以对系统的所有用户进行本地化配置。在 /etc/login.conf 中的以下变量可用于设置 locale 和 MIME 字符集:
language_name|Account Type Description:\
:charset=MIME_charset:\
:lang=locale_name:\
:tc=default:
因此,之前的 Latin-1 例子就会是这样的:
german|German Users Accounts:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:\
:tc=default:
关于这些变量的更多细节,见 login.conf(5)。注意,它已经包含了预先定义的 *russian * 分级。
每当编辑 /etc/login.conf 后,记得执行以下命令来更新数据库能力:
# cap_mkdb /etc/login.conf
注意
对于终端用户来说,需要在他们的 ~/.login_conf 上运行
cap_mkdb
命令,以使任何改变生效。
25.2.1.1.1.改变登录分级的实用程序¶
除了手动编辑 /etc/login.conf 之外,还有几个工具可以用来为新创建的用户设置 locale。
当使用 vipw
添加新用户时,指定 language 来设置 locale:
user:password:1111:language:0:0:User Name:/home/user:/bin/sh
当使用 adduser
添加新用户时,可以为所有新用户预先配置默认语言,也可以为单个用户指定。
如果所有新用户都使用相同的语言,在 /etc/adduser.conf中设置 defaultclass=
language。
要在创建用户时覆盖这个设置,可以在这个提示下输入所需的地区语言:
Enter login class: default []:
或者在调用 adduser
时指定要设置的 locale:
# adduser -class language
如果使用 pw
来添加新的用户,请按以下方式指定 locale:
# pw useradd user_name -L language
要改变一个现有用户的登录分级,可以使用 chpass
。以超级用户身份调用它,并提供要编辑的用户名作为参数:
# chpass user_name
25.2.1.2.shell 启动文件方法¶
不推荐使用这种方法,因为每个使用的 shell 都需要进行手动配置,每个 shell 都有不同的配置文件和不同的语法。举个例子,为了给 sh
设置德语,可以在 ~/.profile 中加入这些行,以设置仅适用于该用户的 shell。这些行也可以添加到 /etc/profile 或 /usr/share/skel/dot.profile 中,以便为所有用户都设置该 shell:
LANG=de_DE.ISO8859-1; export LANG
MM_CHARSET=ISO-8859-1; export MM_CHARSET
然而,对于 csh 来说,配置文件的名称和使用的语法是不同的。这些是以上设置的同等文件 ~/.login、/etc/csh.login 和 /usr/share/skel/dot.login:
setenv LANG de_DE.ISO8859-1
setenv MM_CHARSET ISO-8859-1
使问题复杂化的是,在 ~/.xinitrc 中配置 Xorg 所需的语法也取决于 shell。第一个例子是针对 sh 的,第二个是针对 csh 的:
LANG=de_DE.ISO8859-1; export LANG
setenv LANG de_DE.ISO8859-1
25.2.2.控制台设置¶
有几种本地化的字体可用于控制台。要查看可用字体的列表,请输入 ls /usr/share/syscons/fonts
。要配置控制台字体,在 /etc/rc.conf 中指定 font_name,不含 .fnt 后缀:
font8x16=font_name
font8x14=font_name
font8x8=font_name
可以通过在 /etc/rc.conf 中添加以下内容来设置键盘映射和屏幕映射:
scrnmap=screenmap_name
keymap=keymap_name
keychange="fkey_number sequence"
要查看可用的屏幕映射列表,输入 ls /usr/share/syscons/scrnmaps
。在指定 screenmap_name 时,无需 .scm 后缀。通常需要一个带有相应映射字体的屏幕映射,作为 VGA 适配器字体字符矩阵上的第 8 位扩展到第 9 位的变通方法,这样,如果屏幕字体使用第 8 位列,字母就会被移出伪图区。
要查看可用的键盘映射,请输入 ls /usr/share/syscons/keymaps
。当指定 keymap_name 时,无需 .kbd 后缀。要在不重启的情况下测试键盘映射,请使用 kbdmap(1)。
由于不能在键盘映射中定义功能键序列,因此通常需要使用 keychange
条目来对功能键进行编程以匹配所选的终端类型。
接下来,在 /etc/ttys 中为所有虚拟终端条目设置正确的控制台终端类型。为字符集定义的终端类型总结了可用的终端类型:
表 16. 为字符集定义的终端类型
字符集 |
终端类型 |
---|---|
ISO8859-1 或 ISO8859-15 |
cons25l1 |
ISO8859-2 |
cons25l2 |
ISO8859-7 |
cons25l7 |
KOI8-R |
cons25r |
KOI8-U |
cons25u |
CP437 (VGA 默认) |
cons25 |
US-ASCII |
cons25w |
对于使用宽字符或多字节字符的语言,应从 FreeBSD ports 中安装适合该语言的控制台。可用的 port 的可用终端的 port 中进行了总结。安装完毕后,请参考 port 的 pkg-message 或 man 页面以了解配置和使用说明。
语言 |
port 位置 |
---|---|
繁体中文 (BIG-5) |
|
中文/日语/韩语 |
|
中文/日语/韩语 |
|
日语 |
|
日语 |
|
日语 |
如果在 /etc/rc.conf 中启用了 moused,可能需要额外的配置。默认情况下,驱动 syscons(4) 的鼠标光标在字符集中占据范围 0xd0-0xd3
。如果语言使用了这个范围,请在 /etc/rc.conf 中添加以下一行来移动光标的范围:
mousechar_start=3
25.2.3.设置 Xorg¶
X Window 系统 介绍了如何安装和配置 Xorg。在为本地化配置 Xorg 时,可以从 FreeBSD ports 中获得额外的字体和输入法。可以在 ~/.Xresources 中调整应用程序特定的 i18n 设置,如字体和菜单,并可让用户在图形化的应用程序菜单中查看他们选择的语言。
X 输入法(XIM)协议是符合 Xorg 标准,用于输入非英语字符。可用的输入法 总结了 FreeBSD ports 中可用的输入法应用程序。另外还有一些 Fcitx 和 Uim 应用。
语言 |
输入法 |
---|---|
中文 |
|
中文 |
|
中文 |
|
中文 |
|
中文 |
|
中文 |
|
中文 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
日语 |
|
韩语 |
|
韩语 |
|
韩语 |
|
韩语 |
|
越南语 |
|
越南语 |