第二十五章 本地化-i18n/L10n使用和设置25.1. 简介25.2. 使用本地化25.2.1. 设置登录Shell的区域设置25.2.1.1. 登录类方法25.2.1.1.1. 更改登录类的实用程序25.2.1.2. Shell启动文件方法25.2.2. 控制台设置25.2.3. Xorg设置25.3. 查找 i18n 应用程序25.4. 特定语言的区域设置25.4.1. 俄语(KOI8-R编码)25.4.2. 其他特定语言资源
FreeBSD是一个分布式项目,用户和贡献者遍布世界各地。因此,FreeBSD支持多种语言的本地化,允许用户以非英语语言查看、输入或处理数据。人们可以从大多数主要语言中进行选择,包括但不限于:中文、德语、日语、韩语、法语、俄语和越南语。
国际化一词已缩短为i18n ,表示internationalization(国际化)的第一个字母和最后一个字母之间的字母数。L10n 使用相同的命名方案,但来自 localization (本地化)。i18n/L10n方法、协议和应用程序允许用户使用他们选择的语言。
本章讨论FreeBSD的国际化和本地化特性。阅读本章后,你会知道:
• 如何构造区域名称。 • 如何设置登录shell的区域设置。 • 如何为非英语语言配置控制台。 • 如何为不同语言配置Xorg。 • 如何找到符合i18n标准的应用程序。 • 在哪里可以找到配置特定语言的更多信息。
在阅读本章之前,您应该:
• 知道如何安装其他第三方应用程序。
本地化设置基于三个组件:语言代码(language code)、国家代码(country code)和编码(encoding)。区域名称由以下部分构成:
xxxxxxxxxxLanguageCode_CountryCode.EncodingLanguageCode 和 CountryCode 用于确定国家和特定的语言变体。下表【通用语言和国家代码】提供了 LanguageCode_CountryCode 的一些示例:
表35. 通用语言和国家代码
| LanguageCode_Country Code | 说明 |
|---|---|
| en_US | 英语,美国 |
| ru_RU | 俄语,俄罗斯 |
| zh_TW | 繁体中文,台湾 |
键入以下命令可以找到可用区域设置的完整列表:
xxxxxxxxxx% locale -a | more要确定当前区域设置,请执行以下操作:
xxxxxxxxxx% localemultibyte(3) 中描述了特定于语言的字符集,如ISO8859-1、ISO8859-15、KOI8-R和CP437。字符集的活动列表可以在 IANA注册表 中找到。
某些语言,如中文或日语,不能使用ASCII字符表示,需要使用宽字符或多字节字符进行扩展语言编码。宽或多字节编码的示例包括EUC和Big5。较旧的应用程序可能会将这些编码误认为控制字符,而较新的应用程序通常会识别这些字符。根据实现的不同,用户可能需要编译具有宽或多字节字符支持的应用程序,或者正确配置它。
xxxxxxxxxxFreeBSD使用与Xorg兼容的区域设置编码。本节的其余部分描述了在FreeBSD系统上配置区域设置的各种方法。下一节将讨论查找和编译支持i18n的应用程序的注意事项。
区域设置可以在用户的 ~/.login_conf 或用户shell的启动文件中配置:~/.profile、~/.bashrc 或 ~/.cshrc 。
应设置两个环境变量:
除了用户的shell配置外,还应为特定的应用程序配置和Xorg配置设置这些变量。
有两种方法可用于进行所需的变量赋值: login class 方法,这是推荐的方法,以及 startup file 方法。接下来的两节将演示如何使用这两种方法。
第一种方法是推荐的方法,因为它为每个可能的shell的区域设置名称和MIME字符集分配了所需的环境变量。此设置可以由每个用户执行,也可以由超级用户为所有用户配置。
这个最小的例子在单个用户主目录的 .login_conf 中设置了Latin-1编码的两个变量:
xxxxxxxxxxme:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:这是一个用户 ~/.login_conf 的示例,它以BIG-5编码设置繁体中文的变量。需要更多的变量,因为一些应用程序没有正确尊重中文、日文和韩文的区域设置变量:
xxxxxxxxxx#Users who do not wish to use monetary units or time formats#of Taiwan can manually change each variableme:\ :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:\ :charset=big5:\ :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server或者,超级用户可以配置系统的所有用户进行本地化。/etc/login.conf 中的以下变量用于设置区域设置和MIME字符集:
xxxxxxxxxxlanguage_name|Account Type Description:\ :charset=MIME_charset:\ :lang=locale_name:\ :tc=default:因此,前面的Latin-1示例如下:
xxxxxxxxxxgerman|German Users Accounts:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:\ :tc=default:有关这些变量的更多详细信息,请参阅 login.conf(5) 。请注意,它已经包含预定义的 russian 类。
每当编辑 /etc/login.conf 时,请记住执行以下命令以更新功能数据库:
xxxxxxxxxx# cap_mkdb /etc/login.confxxxxxxxxxx对于最终用户,需要在他们的 ~/.login_conf 上运行cap_mkdb命令才能使任何更改生效。除了手动编辑 /etc/login.conf ,还有几个实用程序可用于为新创建的用户设置区域设置。
使用 vipw 添加新用户时,请指定设置区域设置的语言:
xxxxxxxxxxuser:password:1111:11:language:0:0:User Name:/home/user:/bin/sh使用 adduser 添加新用户时,可以为所有新用户预先配置默认语言,也可以为单个用户指定默认语言。
如果所有新用户使用相同的语言,请在 /etc/adduser.conf 中设置 defaultclass=language 。
要在创建用户时覆盖此设置,请在此提示下输入所需的区域设置:
xxxxxxxxxxEnter login class: default []:或者指定调用 adduser 时要设置的区域设置:
xxxxxxxxxx# adduser -class language如果使用 pw 添加新用户,请按如下方式指定区域设置:
xxxxxxxxxx# pw useradd user_name -L language要更改现有用户的登录类,可以使用 chpass 。以超级用户身份调用它,并提供要编辑的用户名作为参数。
xxxxxxxxxx# chpass user_name不建议使用第二种方法,因为使用的每个shell都需要手动配置,每个shell都有不同的配置文件和不同的语法。例如,要为 sh shell设置德语,可以将这些行添加到 ~/.profile 中,以便仅为该用户设置shell。这些行也可以添加到 /etc/profile 或 /usr/share/skel/dot.profile 中,为所有用户设置shell:
xxxxxxxxxxLANG=de_DE.ISO8859-1; export LANGMM_CHARSET=ISO-8859-1; export MM_CHARSET但是,配置文件的名称和使用的语法对于 csh shell是不同的。这些是 ~/.login 、 /etc/csh.login 或 /usr/share/skel/dot.login 的等效设置:
xxxxxxxxxxsetenv LANG de_DE.ISO8859-1setenv MM_CHARSET ISO-8859-1更复杂的是,在 ~/.xinitrc 中配置Xorg所需的语法也取决于shell。第一个例子是 sh shell,第二个例子是 csh shell:
xxxxxxxxxxLANG=de_DE.ISO8859-1; export LANGxxxxxxxxxxsetenv LANG de_DE.ISO8859-1控制台提供了几种本地化字体。要查看可用字体的列表,请键入 ls /usr/share/syscons/fonts 。要配置控制台字体,请在 /etc/rc.conf 中指定不带 .fnt 后缀的 font_name :
xxxxxxxxxxfont8x16=font_namefont8x14=font_namefont8x8=font_name可以通过在 /etc/rc.conf 中添加以下内容来设置键盘映射和屏幕映射:
xxxxxxxxxxscrnmap=screenmap_namekeymap=keymap_namekeychange="fkey_number sequence"要查看可用屏幕地图的列表,请键入 ls /usr/share/syscons/scrnmaps 。指定 screenmap_name 时不要包含 .scm 后缀。通常需要一个具有相应映射字体的屏幕映射,作为在VGA适配器的字体字符矩阵上将位8扩展到位9的解决方法,这样如果屏幕字体使用位8列,字母就会移出伪图形(pseudographics)区域。
要查看可用密钥映射列表,请键入 ls /usr/share/syscons/keymaps 。指定 keymap_name 时,不要包含 .kbd 后缀。要在不重新启动的情况下测试密钥映射,请使用 kbdmap(1) 。
通常需要 keychange 条目来对功能键进行编程,以匹配所选的终端类型,因为功能键序列无法在键映射中定义。
接下来,在 /etc/ttys 中为所有虚拟终端条目设置正确的控制台终端类型。下表总结了可用的终端类型。
表36. 为字符集定义的终端类型
| 字符集 | 终端类型 |
|---|---|
| ISO8859-1 或 ISO8859-15 | cons25l1 |
| ISO8859-2 | cons25l2 |
| ISO8859-7 | cons25l7 |
| KOI8-R | cons25r |
| KOI8-U | cons25u |
| CP437 (VGA default) | cons25 |
| US-ASCII | cons25w |
对于具有宽字符或多字节字符的语言,请从FreeBSD端口集合中安装该语言的控制台。可用端口汇总在下表中。安装后,请参阅端口的pkg消息或手册页以获取配置和使用说明。
表37. Ports Collection中可用的控制台
| 语言 | Port location |
|---|---|
| Traditional Chinese (BIG-5) | chinese/big5con |
| Chinese/Japanese/Korean | chinese/cce |
| Chinese/Japanese/Korean | chinese/zhcon |
| Japanese | chinese/kon2 |
| Japanese | japanese/kon2-14dot |
| Japanese | japanese/kon2-16dot |
如果在 /etc/rc.conf 中启用了 moused,则可能需要进行其他配置。默认情况下, syscons(4) 驱动程序的鼠标光标占据字符集中的 0xd0-0xd3 范围。如果语言使用此范围,请通过在 /etc/rc.conf 中添加以下行来移动光标的范围:
xxxxxxxxxxmousechar_start=3【5. X Window系统】描述了如何安装和配置Xorg。在配置Xorg进行本地化时,FreeBSD Ports Collection提供了其他字体和输入法。特定于应用程序的i18n设置,如字体和菜单,可以在 ~/.Xresources 中进行调整,并应允许用户在图形应用程序菜单中查看他们选择的语言。
X输入法(X Input Method,XIM)协议是用于输入非英语字符的Xorg标准。可用输入法总结了FreeBSD Ports Collection中可用的输入法应用程序。还提供其他Fcitx和Uim应用程序。
表38. 可用输入法
| 语言 | 输入法 |
|---|---|
| 中文 | 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-honoka |
| 日文 | 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/ibus-hangul |
| 韩文 | korean/imhangul |
| 韩文 | korean/nabi |
| 韩文 | korean/scim-hangul |
| 韩文 | korean/scim-tables |
| 越南文 | vietnamese/xvnkb |
| 越南文 | vietnamese/x-unikey |
i18n应用程序是在库下使用i18n工具包编程的。这些允许开发人员编写一个简单的文件,并将显示的菜单和文本翻译成每种语言。
FreeBSD Ports Collection包含许多内置支持多种语言的宽或多字节字符的应用程序。为了便于识别,这些应用程序的名称中包含了 i18n 。然而,它们并不总是支持所需的语言。
一些应用程序可以使用特定的字符集进行编译。这通常在端口的Makefile中完成,或者通过传递值进行配置。有关如何确定所需的配置值或端口的Makefile以确定在构建端口时使用哪些编译选项的更多信息,请参阅相应FreeBSD端口源代码中的i18n文档。
本节提供了将FreeBSD系统本地化为俄语的配置示例。然后,它为其他语言的本地化提供了一些额外的资源。
本节显示了将FreeBSD系统本地化为俄语所需的具体设置。有关每种设置类型的完整说明,请参阅使用本地化。
要为登录shell设置此区域设置,请在每个用户的 ~/.login_conf 中添加以下行:
xxxxxxxxxxme:My Account:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R:要配置控制台,请在 /etc/rc.conf 中添加以下行:
xxxxxxxxxxkeymap="ru.utf-8"scrnmap="utf-82cp866"font8x16="cp866b-8x16"font8x14="cp866-8x14"font8x8="cp866-8x8"mousechar_start=3对于 /etc/ttys 中的每个 ttyv 条目,使用 cons25r 作为终端类型。
要配置打印,需要一个特殊的输出过滤器将KOI8-R转换为CP866,因为大多数带有俄语字符的打印机都带有硬件代码页CP866。FreeBSD为此提供了一个默认过滤器 /usr/libexec/lpr/ru/koi2alt 。要使用此过滤器,请将此条目添加到 /etc/printcap :
xxxxxxxxxxlp|Russian local line printer:\ :sh:of=/usr/libexec/lpr/ru/koi2alt:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:有关更详细的说明,请参阅 printcap(5) 。
要在已挂载的MS-DOS®文件系统中配置对俄语文件名的支持,请在向 /etc/fstab 添加条目时包含 -L 和区域设置名称:
xxxxxxxxxx/dev/ad0s2 /dos/c msdos rw,-Lru_RU.KOI8-R 0 0有关更多详细信息,请参阅 mount_msdosfs(8) 。
要为Xorg配置俄语字体,请安装 x11-fonts/xorg-fonts-cyrillic 软件包。然后,检查 /etc/X11/xorg.conf 中的 Files 部分。必须在任何其他FontPath条目之前添加以下行:
xxxxxxxxxxFontPath "/usr/local/lib/X11/fonts/cyrillic"Ports Collection中提供了其他西里尔字母(Cyrillic)字体。
要激活俄语键盘,请在 /etc/xorg.conf 的 Keyboard 部分添加以下内容:
xxxxxxxxxxOption "XkbLayout" "us,ru"Option "XkbOptions" "grp:toggle"确保 XkbDisable 在该文件中已被注释掉。
对于 grp:toggle 使用 Right Alt ,对于 grp:ctrl_shift_toggle 则使用 ctrl+shift 。对于 grp:caps_toggle ,使用 CapsLock 。旧的 CapsLock 功能在LAT模式下仍然可用,只能使用 Shift+ CapsLock 。grp:caps_toggle 在Xorg中不起作用,原因未知。
如果键盘有【Windows®】键,并且一些非字母键映射不正确,请在 /etc/xorg.conf 中添加以下行:
xxxxxxxxxxOption "XkbVariant" ",winkeys"xxxxxxxxxx俄语XKB键盘可能无法用于非本地化应用程序。最小化本地化的应用程序应调用XtSetLanguageProc(NULL,NULL,NULL);在程序的早期功能。参阅 http://koi8.pp.ru/xwin.html 有关本地化Xorg应用程序的更多说明。有关KOI8-R编码的更多一般信息,请参阅 http://koi8.pp.ru/ 。
本节列出了配置其他语言环境的一些附加资源。
台湾繁体中文
FreeBSD-台湾项目在 http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/ 。
希腊语本地化
关于FreeBSD中希腊语支持的完整文章已经找不到了,只有希腊语版本,作为FreeBSD希腊语官方文档的一部分。
日语和韩语本地化
关于日语,请参考http://www.jp.FreeBSD.org/ ;
对于韩语,请参阅http://www.kr.FreeBSD.org/ 。
非英语FreeBSD文档
一些FreeBSD贡献者已经将FreeBSD文档的一部分翻译成其他语言。它们可以通过 FreeBSD网站 或 /usr/share/doc 上的链接获得。