22.3. 使用本地化语言

区域设置由三个部分构成:语言代码 (Language Code)、 国家代码 (Country Code) 和编码 (Encoding) 。 所以, 本地化语言名称由这三部分组成:

语言代码_国家代码.编码

22.3.1. 语言和国家代码

为了指定 FreeBSD 系统使用某个特定语言, 用户需要确定特定的国家代码和语言代码( 国家代码能让应用程序知道使用哪种语言)。 以下是语言/国家代码的例子:

语言/国家代码简介
en_US英语(美国)
ru_RU俄语(俄国)
zh_CN简体中文(中国大陆)

完整的可用区域设置代码列表, 可用输入以下命令获得:

% locale -a

22.3.2. 编码

有些语言不使用 ASCII 编码, 它们使用 8 位, 宽或多字节字符编码, 有关这些编码的更多信息, 请参阅 multibyte(3) 。 比较古老的应用程序可能会无法识别它们, 并会认为它们是控制字符。 较新的应用程序通常能识别 8 位字符。 由于个程序实现方式不同, 用户可能不得不重新编译程序添加宽或多字节编码支持, 或进行额外配置。 为了输入和处理宽或多字节字符, FreeBSD Ports Collection 已经有各种语言的程序提供。 详情参阅 FreeBSD port 中的 i18n 相关文档。

具体的来说, 用户可能需要查看应用程序的文档来决定如何正确地配置或确定使用哪些编译选项来编译 port 。

有些事情需要注意的:

  • 特定语言的简单C字符集(参见 multibyte(3)), 例如 ISO8859-1、 ISO8859-15、 KOI8-R, CP437。

  • 宽字节或多字节编码,如EUC, Big5。

现行的字符集列表, 可用在 IANA Registry上获得。

Note:

与此不同的是, FreeBSD 使用与 X11-兼容的本地编码模式。

在 FreeBSD Ports Collection 中, i18n 应用程序已经使用 i18n 来命名。 然而它们不是总支持需要的语言。

22.3.3. 本地化设置

通常本地化只需要在 shell 里设置 LANG 变量, 一般通过用户的 ~/.login_conf 或用户 shell 启动配置文件: (~/.profile~/.bashrc~/.cshrc) 没必要设置本地化相关子集, 例如 LC_CTYPELC_CTIME 。 更多的信息请参考特定语言的 FreeBSD 文档。

您应当在您的配置文件中设置下面两个变量:

  • LANG for POSIX® setlocale(3) family functions

  • MM_CHARSET 应用程序的MIME字符集。

这包括用户的 shell 配置, 特定的应用配置和 Xorg 配置。

22.3.3.1. 设置本地化的方法

本节介绍两种方法设置本地化。 一种是(首选)就是 登录类(login class) 里指定环境变量。 另一种方法是把环境变量加到 启动文件 中去。

22.3.3.1.1. 配置登录类

这种方法允许把本地化名称和 MIME 字符集的环境变量赋给可能的 shell ,而不是加到每个特定 shell 的启动文件里。 用户级设置 允许普通用户自己完成这个设置, 而 管理员级 则需要超级用户权限才能完成设置。

22.3.3.1.1.1. 用户级设置

这里有个在用户家目录下的 .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:\
	:setenv=LC_COLLATE=zh_TW.Big5:\
	:setenv=LC_CTYPE=zh_TW.Big5:\
	:setenv=LC_MESSAGES=zh_TW.Big5:\
	:setenv=LC_MONETARY=zh_TW.Big5:\
	:setenv=LC_NUMERIC=zh_TW.Big5:\
	:setenv=LC_TIME=zh_TW.Big5:\
	:charset=big5:\
	:xmodifiers="@im=gcin": #Set gcin as the XIM Input Server

更多的信息参考 管理员级设置login.conf(5)

22.3.3.1.1.2. 管理员级设置

检查用户的登录类在 /etc/login.conf 里面是否设置了正确的语言。 主要要确定下面的几个设置:

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:

每次修改完登录类都需要执行以下命令更新数据库:

# cap_mkdb /etc/login.conf
使用 vipw(8) 改变登录类

使用 vipw 添加新用户,修改 language 值:

user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh
使用 adduser(8) 修改登录类

使用 adduser 添加新用户, 配置语言:

  • /etc/adduser.conf 里配置 defaultclass = language

  • 另外, 使用是会给出如何信息, 用于变更语言:

    Enter login class: default []:

    如果使用 adduser(8) 创建新用户:

  • 也可用使用以下命令绕过 /etc/adduser.conf 设定的语言, 直接指定需要的语言:

    # adduser -class language
使用 pw(8) 改变登录类

如果您使用 pw(8) 来添加新用户,可用这样:

# pw useradd user_name -L language
22.3.3.1.2. 配置 Shell 启动配置文件的方法

Note:

不推荐使用这种设置方法, 因为它需要为每一个可能的 shell 配置。 推荐使用配置 登录类 的方法代替。

为了设置本地化名称和 MIME 字符集, 需要在 /etc/profile/etc/csh.login 启动文件里面设置以下两个变量。 下面我们使用德语做例子:

/etc/profile 里设置:

LANG=de_DE.ISO8859-1; export LANG
MM_CHARSET=ISO-8859-1; export MM_CHARSET

或在 /etc/csh.login 里设置:

setenv LANG de_DE.ISO8859-1
setenv MM_CHARSET ISO-8859-1

另外, 您也可用把以上设置代码添加到 /usr/share/skel/dot.profile/usr/share/skel/dot.login 文件中。

对于 Xorg 的配置, 需要在 ~/.xinitrc 添加以下一行内容(具体使用哪种, 根据您使用的 shell 确定):

LANG=de_DE.ISO8859-1; export LANG
setenv LANG de_DE.ISO8859-1

22.3.4. 控制台设置

对于所有的简单 C 字符集,在 /etc/rc.conf 中用正在讨论的语言设置正确的控制台字符:

font8x16=font_name
font8x14=font_name
font8x8=font_name

这里的 font_name 取自 /usr/share/syscons/fonts 目录中不带 .fnt 扩展名的文件名。

键盘映射(keymap)和屏幕布局(screenmap)的简单 C 字符集可以通过 sysinstall 进行配置。 启动 sysinstall ,选择 Configure , 之后选择, Console 进行配置就可用了。除此之外, 您也可用直接在 /etc/rc.conf 中添加以下内容:

scrnmap=screenmap_name
keymap=keymap_name
keychange="fkey_number sequence"

这里的 screenmap_name 取自 /usr/share/syscons/scrnmaps 目录中不带 .scm 扩展名的文件名。 一个带映射字体的屏幕布局通常被称为一个工作区, 用来在 VGA 适配器字体矩阵上扩展 8 位到 9 位。 如果屏幕字体是使用一个 8 位的排列, 要移动这些字母离开这些区域。

如果您在 /etc/rc.conf 中启用了 moused 服务, 请留意鼠标指针信息。

默认情况下, syscons(4) 驱动程序的鼠标指针在字符集中占用 0xd0-0xd3 的范围。 如果您的语言使用这个范围, 您必须把指针范围移出这个范围。要为 FreeBSD 启用这个功能, 需要在, /etc/rc.conf 中添加以下内容:

mousechar_start=3

这里的 keymap_name 取自 /usr/share/syscons/keymaps 目录中不带 .kbd 扩展名的文件名。 如果不能确定应该使用哪一个键盘布局, 则可用使用 kbdmap(1) 来测试, 而无需反复重启测试。

通常, keychange 是设定功能键时, 匹配选定的终端类型来说是必需的, 因为功能键序列无法在键盘布局中定义。

此外您还应该检查并确认在 /etc/ttys 中已经为所有的虚拟终端配置了正确的终端类型。 目前, 相关的默认定义有:

字符集设置终端类型
ISO8859-1 or ISO8859-15cons25l1
ISO8859-2cons25l2
ISO8859-7cons25l7
KOI8-Rcons25r
KOI8-Ucons25u
CP437 (VGA default)cons25
US-ASCIIcons25w

对于宽或多字节字符的语言, 可以您的在 /usr/ports/language 目录中选择正确的 FreeBSD port 。 一些 port 以控制台形式出现, 而系统把它作为串行虚拟终端, 因此, 需要在 /etc/ttys 中为 Xorg 和 伪串行控制台准备足够的虚拟终端。 下面是在控制台中使用其他语言的应用程序的部分列表:

语言特定区域
Traditional Chinese (BIG-5)chinese/big5con
Japanesejapanese/kon2-16dot or japanese/mule-freewnn
Koreankorean/han

22.3.5. Xorg 设置

虽然 FreeBSD 默认不安装 Xorg ,但它可用通过 Ports Collection 安装。 如何安装请参考 Chapter 6, X Window 系统 。本节讨论它安装后的如何本地化 Xorg

~/.Xresources 里面,您可以适当调整特定应用程序的 i18n 设置(如字体,菜单等)。

22.3.5.1. 显示字体

安装 x11-servers/xorg-server 后, 安装对于语言的 TrueType® 字体。 在设置了正确的区域信息后,您将能够在图形应用程序中选择需要的语言。

22.3.5.2. 输入非英语字符

X 输入法 (XIM) 协议是 Xorg 客户输入的标准, 所有将作为 XIM 客户端来写的 X11 应用程序从 XIM 输入服务器输入。 不同的语言有几种XIM服务器可用。

22.3.6. 打印机设置

一些简单的 C 字符集通常是用硬编码来编码进打印机的。 宽或多字符的字符集需要特定的设置, 我们推荐使用 apsfilter 设置。 您也可以使用特定语言转换器把文档转换为 PostScript® 或 PDF 格式。

22.3.7. 内核和文件系统

FreeBSD 的快速文件系统 (FFS) 是完全支持 8 位字符的, 因此它可以被用于任何简单的 C 字符集, 但在文件系统中不会保存字符集的名字; 也就是说, 它不加修改地保存 8位信息, 而并不知道如何编码。 正式说来, FFS 目前还不支持任何形式的宽或多字节字符集。 不过, 某些宽或多字符集提供了独立的针对 FFS 的补丁来帮助启用关于它们的支持。 目前这些要么是无法移植的, 要么过于粗糙, 因此我们不打算把它们加入到源代码中。 请参考相关语言的 Web 站点, 以了解关于这些补丁的进一步情况。

FreeBSD MS-DOS® 已经能够配置成用在 MS-DOS®上,Unicode字符集和可选的 FreeBSD 文件系统字符集的更多信息, 请参考 mount_msdosfs(8) 联机手册。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.