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)

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

25.2.3.设置 Xorg

X Window 系统 介绍了如何安装和配置 Xorg。在为本地化配置 Xorg 时,可以从 FreeBSD ports 中获得额外的字体和输入法。可以在 ~/.Xresources 中调整应用程序特定的 i18n 设置,如字体和菜单,并可让用户在图形化的应用程序菜单中查看他们选择的语言。

X 输入法(XIM)协议是符合 Xorg 标准,用于输入非英语字符。可用的输入法 总结了 FreeBSD ports 中可用的输入法应用程序。另外还有一些 Fcitx 和 Uim 应用。

语言

输入法

中文

chinese/gcin

中文

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/kinput2

日语

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