第21章 其他文件系统
附录 D. OpenPGP 密钥
23.2.使用本地化

23.2. 使用本地化

本地化设置主要基于三个部分:语言代码、国家代码和编码。本地化名称是由这些部分构成的,如下所示: LanguageCode_CountryCode.Encoding 语言代码(LanguageCode)和国家代码(CountryCode)用于确定国家和具体的语言变化。通用语言和国家代码提供了一些语言代码_国家代码的例子。

表1. 常见的语言和国家代码

语言代码_国家代码
指代
en_US
英语,美国
ru_RU
俄语,俄罗斯
zh_TW
繁体中文,中国台湾
完整的可用语言列表可以通过输入以下内容找到。
% locale -a | more 要确定当前的地区设置。
% locale 特定语言的字符集,如 ISO8859-1、ISO8859-15、KOI8-R 和 CP437,在 multibyte(3) 中描述。有效的字符集列表可以在 IANA Registry 找到。
有些语言,如中文或日文,不能用 ASCII 字符表示,需要用宽字符或多字节字符进行扩展语言编码。宽字符或多字节编码的例子包括 EUC 和 Big5。旧的应用程序可能会误认为这些编码是控制字符,而新的应用程序通常会识别这些字符。根据不同的实现,用户可能需要编译一个支持宽字符或多字节字符的应用程序,或者对其进行正确的配置。
提示:
FreeBSD 使用与 Xorg 兼容的地区编码。
本节的其余部分将描述在 FreeBSD 系统上配置 locale 的各种方法。下一节将讨论寻找和编译支持 i18n 的应用程序的注意事项。

23.2.1. 为登录 shell 设置地区设置

地区设置是在用户的 ~/.login_conf 或用户 shell 的启动文件中配置的:~/.profile~/.bashrc,或 ~/.cshrc
有两个环境变量应该被设置:
  • LANG,用于设置语言环境。
  • MM_CHARSET,设置应用程序使用的MIME字符集。
除了用户的 shell 配置之外,这些变量还应该为特定的应用程序配置和 Xorg 配置而设置。
有两种方法可用于进行所需的变量分配:登录类方法,这是推荐的方法,以及启动文件方法。接下来的两节将演示如何使用这两种方法。

23.2.1.1. 登录类方法

这第一种方法是推荐的方法,因为它为每个可能的 shell 分配了所需的环境变量,如 locale name 和 MIME 字符集。这个设置可以由每个用户执行,也可以由超级用户为所有用户配置。
这个最小的例子在单个用户的主目录的.login_conf 中为 Latin-1 编码设置了两个变量:
1
me:\
2
:charset=ISO-8859-1:\
3
:lang=de_DE.ISO8859-1:
Copied!
下面是一个用户的~/.login_conf 的例子,它为 BIG-5 编码的繁体中文设置了变量。因为有些应用程序不能正确地尊重中文、日文和韩文的地域变量,所以需要设置更多的变量:
1
#Users who do not wish to use monetary units or time formats
2
#of Taiwan can manually change each variable
3
me:\
4
:lang=zh_TW.Big5:\
5
: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:\
Copied!
另外,超级用户可以对系统的所有用户进行本地化配置。在/etc/login.conf 中的以下变量用于设置 locale 和 MIME 字符集:
1
language_name|Account Type Description:\
2
:charset=MIME_charset:\
3
:lang=locale_name:\
4
:tc=default:
Copied!
因此,之前的 Latin-1 例子会是这样的:
1
german|German Users Accounts:\
2
:charset=ISO-8859-1:\
3
:lang=de_DE.ISO8859-1:\
4
:tc=default:
Copied!
关于这些变量的更多细节,见 login.conf(5)。注意,它已经包含了预先定义的俄语类。
每当编辑/etc/login.conf 时,记得执行以下命令来更新能力数据库。
1
# cap_mkdb /etc/login.conf
Copied!
提示:
对于终端用户来说,cap_mkdb 命令需要在他们的 ~/.login_conf 上运行,以使任何改变生效。

23.2.1.1.1. 改变登录类别的实用程序

除了手动编辑 /etc/login.conf 之外,还有几个工具可以用来为新创建的用户设置 locale。
当使用 vipw 添加新用户时,指定语言来设置 locale:
1
user:password:1111:language:0:0:User Name:/home/user:/bin/sh
Copied!
当使用adduser添加新用户时,默认语言可以为所有新用户预先配置,也可以为单个用户指定。
如果所有新用户都使用相同的语言,在 /etc/adduser.conf中设置defaultclass=language。
要在创建用户时覆盖这个设置,可以在这个提示下输入所需的地区语言:
1
Enter login class: default []:
Copied!
或者在调用 adduser 时指定要设置的 locale:
1
# adduser -class language
Copied!
如果使用 pw 来添加新的用户,请按以下方式指定 locale:
1
# pw useradd user_name -L language
Copied!
要改变一个现有用户的登录类别,可以使用 chpass。以超级用户身份调用它,并提供要编辑的用户名作为参数:
1
# chpass user_name
Copied!

23.2.1.2. shell 启动文件方法

这第二种方法不被推荐,因为每个使用的 shell 都需要手动配置,每个 shell 都有不同的配置文件和不同的语法。举个例子,为了给 sh shell 设置德语,可以在~/.profile中加入这些行,以设置仅适用于该用户的 shell。这些行也可以添加到/etc/profile/usr/share/skel/dot.profile 中,以便为所有用户设置该 shell:
1
LANG=de_DE.ISO8859-1; export LANG
2
MM_CHARSET=ISO-8859-1; export MM_CHARSET
Copied!
然而,对于 csh shell 来说,配置文件的名称和使用的语法是不同的。这些是~/.login、/etc/csh.login/usr/share/skel/dot.login的同等设置:
1
setenv LANG de_DE.ISO8859-1
2
setenv MM_CHARSET ISO-8859-1
Copied!
使问题复杂化的是,在~/.xinitrc中配置 Xorg 所需的语法也取决于 shell。第一个例子是针对 sh shell 的,第二个是针对 csh shell 的:
1
LANG=de_DE.ISO8859-1; export LANG
Copied!
1
setenv LANG de_DE.ISO8859-1
Copied!

23.2.2. 控制台设置

有几种本地化的字体可用于控制台。要查看可用字体的列表,请输入 ls /usr/share/syscons/fonts。要配置控制台字体,在/etc/rc.conf 中指定font_name,不含.fnt 后缀:
1
font8x16=font_name
2
font8x14=font_name
3
font8x8=font_name
Copied!
可以通过在 /etc/rc.conf中添加以下内容来设置键盘映射和屏幕映射:
1
scrnmap=screenmap_name
2
keymap=keymap_name
3
keychange="fkey_number sequence"
Copied!
要查看可用的屏幕映射列表,输入 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 中为所有虚拟终端条目设置正确的控制台终端类型。为字符集定义的终端类型总结了可用的终端类型。

表2. 为字符集定义的终端类型

字符集
终端类型
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 Collection 中安装适合该语言的控制台。可用的端口在 Ports Collection 的 Available Console 中进行了总结。安装完毕后,请参考 port 的 pkg-message 或 man 页面以了解配置和使用说明。

表 3. 来自 Ports Collection 的可用控制台

语言
port 位置
繁体中文 (BIG-5)
chinese/big5con
中文/日语/韩语
chinese/cce
中文/日语/韩语
chinese/zhcon
日语
chinese/kon2
日语
japanese/kon2-14dot
日语
japanese/kon2-16dot
如果在/etc/rc.conf中启用了 moused,可能需要额外的配置。默认情况下,syscons(4) 驱动的鼠标光标在字符集中占据 0xd0-0xd3 的范围。如果语言使用这个范围,请在/etc/rc.conf中添加以下一行来移动光标的范围:
1
mousechar_start=3
Copied!

23.2.3. Xorg的设置

X Window System 描述了如何安装和配置 Xorg。在为本地化配置 Xorg 时,额外的字体和输入法可以从 FreeBSD Ports Collection 中获得。应用程序特定的 i18n 设置,如字体和菜单,可以在 ~/.Xresources 中进行调整,并应允许用户在图形化的应用程序菜单中查看他们选择的语言。
X 输入法(XIM)协议是一个 Xorg 标准,用于输入非英语字符。可用的输入法总结了 FreeBSD Ports Collection 中可用的输入法应用程序。另外还有一些 Fcitx 和 Uim 应用。

表 4. 可用的输入法

语言
输入法
中文
chinese/ibus-chewing
中文
chinese/ibus-pinyin
中文
chinese/oxim
中文
chinese/scim-fcitx
中文
chinese/scim-pinyin
中文
chinese/scim-tables
日语
japanese/ibus-anthy
日语
japanese/ibus-mozc
日语
japanese/ibus-skk
日语
japanese/im-ja
日语
japanese/Kinputs
日语
japanese/scim-anthy
日语
japanese/scim-canna
日语
japanese/scim-honnoka
日语
japanese/scim-honoka-plugin-romkan
日语
japanese/scim-honoka-plugin-wnn
日语
japanese/scim-prime
日语
japanese/scim-skk
日语
japanese/scim-tables
日语
japanese/scim-tomoe