Links
Comment on page

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 页面以了解配置和使用说明。

表 17. 来自 ports 的可用控制台

语言
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 应用。

表 4. 可用的输入法

语言
输入法
中文
中文
中文
中文
中文
中文
中文
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
日语
韩语
韩语
韩语
韩语
越南语
越南语
FreeBSD 中文社区