发新话题
打印

FreeBSD handbook中文版 13 本地化:I18N/L10N 的使用和安装

FreeBSD handbook中文版 13 本地化:I18N/L10N 的使用和安装

  目录
13 本地化:I18N/L10N 的使用和安装
13.1 概要
13.2 基础知识
13.3 使用本地化语言
13.4 高级主题
13.5 将FreeBSD 本地化
=============================================================
第13 章本地化- I18N/L10N 使用与设置
=============================================================
(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com)  
13.1 概要
FreeBSD 是一个由分布于全世界的用户和贡献者组成的项目。这章会讨论FreeBSD 的国
际化和本地化,允许非英语用户也能使用FreeBSD 很好地工作。在系统和应用水平上,主要
是通过执行i18N 标准来实现的。
读完这章,你将了解到:  
. 在现代操作系统中,不同的语言和地域是如何来编码的。
. 如何为你的登陆shell 设置本地化。
. 如何用非英语语言来修改你的控制台。
. 如何使用不同的语言来有效地使用X windows。
. 哪里可以找到有关开发符合i18N 标准的应用程序的信息。
阅读这章之前,你应当了解:  
. 如何安装第三方应用程序(第4 章)。
13.2 基础知识
13.2.1 什么是I18N/L10N?  
开发人员依据I18N 标准缩短了国际化开发的进程。L10N 依据“localization”使用同
样的命名规则。I18N/L10N 方法、协议和应用,结合在一起允许用户使用他们所选择的语言。
I18N 应用程序使用I18N 工具来编程。它允许开发人员写一个简单的文件,然后将显示的菜
单和文本翻译成本地语言。我们非常鼓励程序员遵循这种规则。
13.2.2 为什么要使用I18N/L10N?  
I18N/L10N 标准能够很好地支持你查看,输入或处理非英语语言。
13.2.3 I18N 支持哪些语言?  
第1 页FreeBSD 使用手册
当前,它能支持世界上绝大部分主力语言,包括但不限于:中文,德文,日文,朝鲜文,  
法文,俄文,越南文等等。
13.3 使用本地化语言
I18N 不是FreeBSD 特有的,它是一个规则。我们鼓励你帮助FreeBSD 完善这一规则。
本地化设置需要具备三个条件:语言代码、国家代码和编码。本地名字可以用下面这些部分
来构造:  
LanguageCode_CountryCode.Encoding  
13.3.1 语言和国家代码
为了用特殊的语言来对FreeBSD 系统进行本地化,用户必须要知道相应的国家和语言
代码。另外WEB 浏览器,SMTP/POP 服务器,web 服务器等等都是以这个为基础的。下面
就是一个国家和语言代码的例子:  
语言/国家代码描述
English - United States en_US  
ru_RU Russian for Russia  
zh_TW  
13.3.2 编码
一些语言不使用ASCII 编码,它使用8 位,更宽或多位的字符,可以看看multibyte 了
解更多细节。比较老的应用会无法认出它,把它误认为是控制字符。比较新的应用通常会认
出8 位字符。根据执行情况,用户可能需要使用更宽或多位字符支持的标准来重新编译这个
应用,或者将它正确配置。为了输入或处理更宽或多位字符,FreeBSD Ports collection 已经
为每一个语言提供了相应的程序。可以在各自的FreeBSD port 中参考一下I18N 的文档。
需要特别指出的:用户需要看看应用文档以决定如何配置正确,或需要使用正确的值来
配置/Makefile/compiler。
记住下面这些:  
1. Language specific single C chars character sets, i.e., ISO_8859-1, ISO_8859-15, KOI8-R,  
CP437.  
2. Wide or multibyte encodings, f.e. EUC, Big5.  
Traditional Chinese for Taiwan  
第2 页FreeBSD 使用手册
你可以在the IANA Registry  
ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets)检查一下字符现
行列表。
13.3.3 I18N 应用
在FreeBSD 的Ports 和Package 系统中,I18N 应用已经使用I18N 来命名了。然而,它
们不是总支持所需要的语言。
13.3.4 设置本地化
理论上,在登陆shell 时只需要输出他/她的本地名字的值,通常是通过用户的
:charset=ISO-8859-1:\  
:lang=de_DE.ISO_8859-1:  
~/.login_conf 文件或用户登陆shell 的配置(~/.profile, ~/.bashrc, ~/.cshrc)来完成。
这需要设置所有的本地的子集(例如LC_CTYPE, LC_CTIME 等)。请参考特殊语言FreeBSD 文
档以了解更多信息。
你应当在你的配置文件中设置下面两个值:  
1. LANG for POSIX setlocale family functions  
2. MM_CHARSET for applications’ MIME character set  
这包括用户的shell 配置,特殊的应用配置和X11 配置。
13.3.4.1 设置本地化的方法
有两种方法来设置本地化,下面都会描述到。第一种是在login class 中分配环境变量,  
第二种是增加环境变量,分派到系统shell 的启动文件中。
13.3.4.1.1 登陆的分类方法
这个方法是允许本地名字和MIME 字符设置所需要的环境变量为每一个可能的shell 重
新分配一次。用户级水平的设置可以由用户自己来做,管理员级的设置需要由超级用户来做。
13.3.4.1.1.1 用户级水平的设置
这是在用户主目录中的一个.login_conf 文件的例子,它已为Latin-1 编码作了变量设置:  
german:German User:\  
第3 页FreeBSD 使用手册
这是一个设置繁体中文的例子。需要注意一些变量,因为一些软件不遵守针对中文、日
文和朝鲜文的变量规则。
#Users who do not wish to use monetary units or time formats  
#of Taiwan can manually change each variable  
taiwan:Taiwanese User:\  
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 的使用说明了解更多细节。
13.3.4.1.1.2 管理员级设置
检查/etc/login.conf 中正确语言的用户种类。确信这些设置出现在/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.ISO_8859-1:\  
:tc=default:  
使用vipw 改变登陆类型,使用vipw 增加新用户,然后确定象下面这样:  
第4 页FreeBSD 使用手册
user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh  
使用adduser 改变登陆类型,使用adduser 增加新的用户,然后这样做:  
Set defaultclass = language in /etc/adduser.conf  
在这个例子中,记住你必须为使用其它语言的所有用户键入一个默认的类。
另一个不同的方法是每次回答指定的语言
Enter login class: default []:  
还有就是为你希望添加不同语言的每个用户使用下面这个命令:  
# adduser -class language  
使用pw 改变登陆类型。如果你使用pw 来增加新的用户,以这种形式呼叫:  
# pw useradd user_name -L language  
13.3.4.1.2 Shell 启动文件的方法
要增加本地名字和MIME 字符的设置,只要在/etc/profile 或/etc/csh.login shell  
启动文件中设置两个环境变量。我们使用德语作为例子:  
在/etc/profile 中:  
LANG=de_DE.ISO_8859-1; export LANG  
MM_CHARSET=ISO-8859-1; export MM_CHARSET  
Or in /etc/csh.login:  
setenv LANG de_DE.ISO_8859-1  
setenv MM_CHARSET ISO-8859-1  
你可以把上面的指令添加到/usr/share/skel/dot.profile 文件,或
/usr/share/skel/dot.login 文件。
For X11:  
In $HOME/.xinitrc:  
Or:  
LANG=de_DE.ISO_8859-1; export LANG  
第5 页FreeBSD 使用手册
Depending on your shell (see above).  
setenv LANG de_DE.ISO_8859-1  
13.3.5 控制台设置
对于所有的简单C 字符设置,在/etc/rc.conf 中设置正确的控制台字符:  
font8x16=font_name  
font8x14=font_name  
font8x8=font_name  
这儿的字符名来自/usr/share/syscons/fonts 目录,不带.fnt 后缀。也可以通过使用
/stand/sysinstall 程序为你的简单C 字符设置正确的键盘布局和屏幕布局。进入
sysinstall,选择configue,然后console。你可以增加下面的行到/etc/rc.conf 文件:  
scrnmap=screenmap_name  
keymap=keymap_name  
keychange=”fkey_number sequence”  
这儿的屏幕布局的名称是来自/usr/share/syscons/scrnmaps 目录。一个带映射字体的
屏幕布局通常被作为一个工作区,用来在VGA 适配器字体矩阵上展开8 位到9 位。如果屏幕
字体是使用一个8 位的排列,要移动这些字母离开这些区域。如果你通过在你的
/etc/rc.conf 文件中设置下面这项来启用moused daemon:  
moused_enable="YES"  
然后在下一段检查鼠标指针信息。
默认的,syscons 驱动器的鼠标指针占用0xd0-0xd3 范围的字符设置。如果你的语言使
用这个范围,你必须把指针范围移出这个范围。要在5.0 以前的FreeBSD 版本中启用工作区,  
需要在你的内核中添加下面这行:  
options SC_MOUSE_CHAR=0x03  
对于FreeBSD 5.0 版本,需要在/etc/rc.conf 文件中添加下面这行:  
mousechar_start=3  
这儿的keymap_name可以不加.kbd 后缀而移出/usr/share/syscons/keymaps 目录。
第6 页FreeBSD 使用手册
因为功能键的范围不能被定义在键盘地图中,所以keychange 通常需要安排功能键来匹
配选择的终端类型。也可以在/etc/ttys 中为所有ttyv*入口设定正确的控制台终端类型。
当前,预先定义的是这样的:  
终端类型字符设置
cons25l1 ISO-8859-1 or ISO-8859-15  
ISO-8859-2 cons25l2  
KOI8-R cons25r  
KOI8-U cons25u  
CP437 (hardware default) or cons25  
US-ASCII  
对于多字节字符语言,可以在/usr/ports/ language目录中使用正确的FreeBSD port.  
一些ports 以控制台出现,而系统把它作为串行vtty's,因此,你必须为X11 和伪串行控
制台准备足够的vtty's。这儿是使用其他语言控制台的应用程序的部分列表:  
定位语言
Traditional Chinese (BIG-5) chinese/big5con  
Japanese japanese/ja-kon2-* or japanese/Mule_Wnn  
Korean korean/ko-han  
13.3.6 X11 设置
虽然X11 不是FreeBSD 计划的一部分,但我们已经包括了FreeBSD 用户的一些信息。
具体细节,可以参考XFree86 的web 站点。在~/.Xresources 中,你可以适当调节I18N 设
置的应用细节(如:字体,菜单等)。
13.3.6.1 显示字体
安装X11 True Type-Common 服务器和安装对应语言的truetype 字体。设置正确的本地
信息可以允许你在菜单上看到你所选的语言。
13.3.6.2 输入非英语字符
X11 输入方法协议是所有X11 客户端的一个新标准。所有X11 应用程序应当在XIM 客
户端书写,从XIM 输入服务器输入。不同的语言有集中XIM 服务器变量。
第7 页FreeBSD 使用手册
13.3.7 打印机设置
一些简单的C 字符设置通常是根据硬件来对打印机进行编码的。广泛和多位的字符设
置需要特殊的设置,我们建议使用apsfilter。你也可以把文档转换成Postscript 或PDF 格式。
13.3.8 内核和文件系统
FreeBSD FFS 文件系统是8 位的,所以它能用来做简单的C 类型的字符设置,但不会
有字符设置名字会储存在文件系统中;它是不知道任何有关编码规则的。FFS 不支持任何更
宽或多位字符设置形式的。然而,一些更宽或多位的字符设置已经通过添加补丁来对FFS  
进行支持。可以参考相关语言的web 站点看看更多信息和修正文件。FreeBSD 的MS-DOS  
文件系统已经能够配置成功用来在MSDOS,统一字符编码和FreeBSD 文件系统字符集之间
互相转换。可以看看mount msdos 的联机手册了解更多细节。
13.4 高级主题
如果你想编译I18N 应用程序或符合I18N 的应用程序,请阅读这节。
13.4.1 编译I18N 程序
许多FreeBSD Ports 已经得到I18N 的支持。他们中的一些都有-I18N 的标记。然而一
些象mySQL 的程序需要用特殊的字符重新配置。这通常可以在编译文件或在源代码中通过一
个值来配置。
13.4.2 编写适合I18N 的应用程序
为了确定其他语言的应用程序使用起来比较有效,我们希望你按I18N 规则来编程。GNU  
的Gcc 编译器,象QT 和GTK 这样的GUI 库可以通过特殊的字符处理来支持I18N。编写一个
符合I18N 规则的程序是很容易的。它允许开发者能很快支持你的语言。可以参考I18N 文档
了解更多信息。与通常的理解相反,I18N 规则的代码很容易写。通常,它包括用库来包装
你的字符的特殊功能。另外,请确定对wide 或multibyte 字符的支持。
13.5 将FreeBSD 本地化
13.5.1 俄语(KOI8-R 编码)  
有关KOI8-R编码的详细信息,请查看KOI8-R参考KOI8-R References (Russian Net  
Character Set)。
第8 页FreeBSD 使用手册
13.5.1.1 本地设置
把下面的行加入到你的~/.login_conf 文件:  
me:My Account:\  
:charset=KOI8-R:\  
:lang=ru_RU.KOI8-R:  
13.5.1.2 控制台设置
添加下面这行到内核配置文件:  
options SC_MOUSE_CHAR=0x03  
在/etc/rc.conf 中使用下面的设置:  
keymap=”ru.koi8-r”  
scrnmap=”koi8-r2cp866”  
font8x16=”cp866b-8x16”  
font8x14=”cp866-8x14”  
font8x8=”cp866-8x8”  
对于每个在/etc/ttys 中的ttyv*记录,要使用cons25r 作为终端类型。
13.5.1.3 打印机设置
既然绝大多数带俄语字符的打印机遵循Cp866 的标准,那么需要一个与KOI8-R 匹配的
输出过滤器——> CP866 conversion。这样一个过滤器安装在/usr/libexec/lpr/ru/koi2alt  
中。一个支持俄语的打印机/etc/printcap 是这样的:  
lp|Russian local line printer:\  
:shf=/usr/libexec/lpr/ru/koi2alt:\  
:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:  
13.5.1.4 MS-DOS FS 和Russian 文件系统
第9 页FreeBSD 使用手册
下面的例子是在挂上MSDOS 文件系统后,对俄语文件名的支持:  
/dev/ad0s2 /dos/c msdos rw,-W=koi2dos,-L=ru_RU.KOI8-R 0 0  
13.5.1.5. X11 设置
1. 先描述没有X 的本地设置
注意: Russian KOI8-R 本地化方法可能在XFree86 低于3.3 的版本中不能工作。
3. # make install  
上面的port 安装了KOI8-R 字体的最新的版本。XFree86 3.3 已经支持了一些KOI8-R 字
体,但效果不太好。
在你的/etc/XF86Config 文件中检查“Files”那节。需要加入下面这些FontPath 行:  
FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/misc”  
FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/75dpi”  
FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/100dpi”  
如果你使用一个高分辨率的显示模式,可以交换75 dpi 和100 dpi 行。
1. 激活俄语键盘,添加下面的几行到XF86Config 配置文件中的”Keyboard”段。
For XFree86 v3.*:  
XkbLayout “ru”  
XkbOptions “grp:caps_toggle”  
For XFree86 v4.*:  
Option “XkbLayout” “ru”  
Option “XkbOptions” “grp:caps_toggle”  
要确信XkbDisable 已经关闭了。RUS/LAT 的切换是CapsLock 键。如果你的键盘有
“Windows”键,注意在俄语模式中,一些非字母键会映射错误,可以添加下面这行到
你的XF86Config 配置文件。
对于XFree86 v3.*:  
XkbVariant “winkeys”  
2. 进入/usr/ports/russian/X.language 目录,执行下面的命令:  
第10 页对于XFree86 v4.*:  
FreeBSD 使用手册
Option “XkbVariant” “winkeys”  
13.5.2 设置繁体中文
FreeBSD-Taiwan 计划有一个有关FreeBSD I18N/L10N 的教程。
http://freebsd.sinica.edu.tw/~ncvs/zh-l10n-tut/index.html  
描述软件包
outta-port tag=. Beta-quality Ports Collection for Chinese  
zh-L10N-tut tag=. Localizing FreeBSD Tutorial in BIG-5 Traditional Chinese  
zh-doc tag=. FreeBSD Documentation Translation to BIG-5 Traditional Chinese  
Chuan-Hsing Shen<s874070@mail.yzu.edu.tw>已经使用FreeBSD-Taiwan’s zh-L10N-tut  
创建了Chinese FreeBSD Collection (CFC)。这些软件包和脚本文件可以在
ftp://ftp.csie.ncu.edu.tw/OS/FreeBSD/taiwan/CFC/找到。
请记住:linux也有你一份!
发新话题