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 编码设置了两个变量:
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)。注意,它已经包含了预先定义的俄语类。
每当编辑/etc/login.conf
时,记得执行以下命令来更新能力数据库。
# cap_mkdb /etc/login.conf
提示:
对于终端用户来说,cap_mkdb 命令需要在他们的
~/.login_conf
上运行,以使任何改变生效。
23.2.1.1.1. 改变登录类别的实用程序
除了手动编辑 /etc/login.conf 之外,还有几个工具可以用来为新创建的用户设置 locale。
当使用 vipw 添加新用户时,指定语言来设置 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
23.2.1.2. shell 启动文件方法
这第二种方法不被推荐,因为每个使用的 shell 都需要手动配置,每个 shell 都有不同的配置文件和不同的语法。举个例子,为了给 sh shell 设置德语,可以在~/.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 shell 来说,配置文件的名称和使用的语法是不同的。这些是~/.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 shell 的,第二个是针对 csh shell 的:
LANG=de_DE.ISO8859-1; export LANG
setenv LANG de_DE.ISO8859-1
23.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 中为所有虚拟终端条目设置正确的控制台终端类型。为字符集定义的终端类型总结了可用的终端类型。
表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
中添加以下一行来移动光标的范围:
mousechar_start=3
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 |
日语 | japanese/scim-uim |
日语 | japanese/skkinput |
日语 | japanese/skkinput3 |
日语 | japanese/uim-anthy |
韩语 | korean/imhangul |
韩语 | korean/nabi |
韩语 | korean/scim-hangul |
韩语 | korean/scim-tables |
越南语 | vietnamese/xvnkb |
越南语 | vietnamese/x-unikey |