18.3. 使用本地化语言

I18N不是FreeBSD特有的,它是一个规则。我们鼓励您帮助FreeBSD完善这一规则。

本地化设置需要具备三个条件:语言代码 (Language Code)、 国家代码 (Country Code) 和编码(Encoding)。 本地名字可以用下面这些部分来构造:

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

18.3.1. 语言和国家代码

为了用特殊的语言来对FreeBSD系统进行本地化(或其他类UNIX®系统), 用户必须要知道相应的国家和语言代码(国家代码告诉应用程序使用哪一种语言规范)。 此外,WEB浏览器,SMTP/POP服务器,web服务器等都是以这个为基础的。下面就是一个国家和语言代码的例子:

语言/国家代码 描述
en_US 美国英语
ru_RU 俄语
zh_CN 简体中文

18.3.2. 编码

一些语言不使用 ASCII 编码,它们使用8位,更宽或多位的字符, 更多的信息可以看看multibyte(3) 。 比较老的应用程序可能会无法认出它们,把它们误认为是控制字符。 比较新的应用程序通常会认出8位字符。 根据执行情况,用户可能需要使用更 宽或多位字符支持的标准来重新编译这个应用程序,或者将它正确配置。FreeBSD Ports collection 已经为每一个语言提供了相应的程序。可以在各自的FreeBSD port中参考一下I18N的文档。

需要特别指出的:用户需要看看应用程序的文档以决定如何配置才能正确设置configure/Makefile/compiler。

记住下面这些:

您可以在IANA Registry检查一下现行的字符集列表。

Note: FreeBSD 4.5及以后的版本使用X11兼容的本地编码来代替。

18.3.3. I18N应用程序

在FreeBSD Ports和Package系统里面,I18N应用程序已经使用I18N 来命名。然而它们不是总支持需要的语言。

18.3.4. 本地化设置

通常只要在登入shell里面设置LANG为本地化, 一般通过设置用户的 ~/.login_conf 或用户shell的启动文件(~/.profile~/.bashrc, ~/.cshrc)。没有必要设置 LC_CTYPELC_CTIME。 更多的信息请参考特定语言的FreeBSD文档。

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

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

18.3.4.1. 设置本地化的方法

有两种方法来设置本地化,接下来都会描述。 第一种 (推荐) 就是在 登入分类 里面指定环境变量。 第二种方法是把环境变量加到shell的启动文件里面。

18.3.4.1.1. 登入分类方法

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

18.3.4.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:\
    :lc_all=zh_TW.Big:\
    :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:\
    :charset=big5:\
    :xmodifiers="@im=xcin": #Setting the XIM Input Server

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

18.3.4.1.1.2. 管理员级设置

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

language_name:accounts_title:\
    :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:

使用vipw(8)改变登入类型。

使用vipw添加新用户,看起来像下面这样:

user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh

adduser(8)改变登入类型。

adduser添加新用户看起来像下面这样:

  • /etc/adduser.conf里面设置defaultclass = 语言。应该记住,您必须为使用其它语言的所有用户设置 缺省类别。

  • 每一次使用adduser(8)的时候,一个特定语言的可选择性回答会像下面这样给出:

    Enter login class: default []:
    


  • 如果您打算给每一个用户使用另外一种语言,您应该这样:

    # adduser -class language
    

使用pw(8)改变登入类型。

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

# pw useradd user_name -L language

18.3.4.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 (和前面的/etc/profile一样),或者/usr/share/skel/dot.login (和前面的/etc/csh.login一样)。

对于X11:

$HOME/.xinitrc里面:

LANG=de_DE.ISO8859-1; export LANG

或者:

setenv LANG de_DE.ISO8859-1

依赖您的shell(看上面)。

18.3.5. 控制台设置

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

font8x16=font_name
font8x14=font_name
font8x8=font_name

这儿的font_name来自于/usr/share/syscons/fonts目录, 不带.fnt后缀。

也可以通过/stand/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 daemon:

moused_enable="YES"

那么需要在下一段检查鼠标指针信息。

默认情况下, syscons(4)驱动程序的鼠标指针在字符集中占用0xd0-0xd3的范围。 如果您的语言使用这个范围,您必须把指针范围移出这个范围。 要在5.0以前的FreeBSD版本中启用工作区,需要在您的内核中添加下面这行:

options        SC_MOUSE_CHAR=0x03

对于 FreeBSD 4.4 和以后的版本, 需要在 /etc/rc.conf 中加入:

mousechar_start=3

这儿的keymap_name来自于/usr/share/syscons/keymaps目录, 不带.kbd后缀。如果您不确定该使用哪一种键盘布局,使用kbdmap(1)您可以不重起 来检测您的键盘布局。

因为功能键的范围不能被定义在键盘地图中,所以keychange通常需要安排功能键来匹配选择的终端类型。

也可以在/etc/ttys为所有ttyv*记录设定正确的控制台终端类型。 当前,预定义是这样的:

字符集设置 终端类型
ISO-8859-1 or ISO-8859-15 cons25l1
ISO-8859-2 cons25l2
ISO-8859-7 cons25l7
KOI8-R cons25r
KOI8-U cons25u
CP437 (VGA default) cons25
US-ASCII cons25w

对于多字节字符语言,可以您的在 /usr/ports/language 目录中使用正确的FreeBSD port。一些port以控制台出现, 而系统把它作为串行vtty终端,因此, 必须为 X11 和伪串行控制台准备足够的vtty终端。 下面是在控制台中使用其他语言的应用程序的部分列表:

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

18.3.6. X11设置

虽然X11不是FreeBSD计划的一部分, 但我们已经为FreeBSD用户包含了一些信息。 具体细节可以参考 XFree86™web站点 或是您使用的 X11 Server。

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

18.3.6.1. 显示字体

安装X11 TrueType® 公共服务器 (x11-servers/XttXF86srv-common) 和安装对应语言的TrueType字体。设置正确的本地信息可以允许您在菜单上看到您所选的语言。

18.3.6.2. 输入非英语字符

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

18.3.7. 打印机设置

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

18.3.8. 内核和文件系统

FreeBSD快速文件系统(FFS)是纯8位的,所以它能使用任何简单的C字符集(参考multibyte(3)), 但不会有字符集名字会储存在文件系统中。它是不知道任何有关编码规则的。 正式的,FFS不支持任何更宽的或多位的字符集形式。 然而一些更宽的或多位的字符集已经通过添加补丁来对FFS进行支持。 他们只是临时性的修正,我们决定不把他们包括在源代码树中。 可以参考相关语言的web站点看看更多信息和修正文件。

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