语言代码_国家代码.编码
This translation may be out of date. To help with the translations please access the FreeBSD translations instance .
FreeBSD是一个由分布于全世界的用户和贡献者支持的项目。 这章将讨论FreeBSD的国际化和本地化的问题,允许非英语用户也能使用FreeBSD很好地工作。 在系统和应用水平上,主要是通过执行i18N标准来实现的,所以这里我们将为读者提供详细的介绍。
读完这一章,您将了解:
不同的语言和地域是如何在现代操作系统上进行编码的。
如何为您的登入shell设置本地化。
如何配置您的控制台为非英语语言。 languages.
如何使用不同的语言来有效地使用X Windows。
在哪里可以找到更多有关开发符合i18N标准的应用程序的信息。
阅读这章之前,您应当了解:
怎样安装额外的第三方程序( 安装应用程序. Packages 和 Ports )。
I18N不是FreeBSD特有的,它是一个规则。我们鼓励您帮助FreeBSD完善这一规则。
本地化设置需要具备三个条件:语言代码 (Language Code)、 国家代码 (Country Code) 和编码(Encoding)。 本地名字可以用下面这些部分来构造:
语言代码_国家代码.编码
为了用特殊的语言来对FreeBSD系统进行本地化(或其他类UNIX®系统), 用户必须要知道相应的国家和语言代码(国家代码告诉应用程序使用哪一种语言规范)。 此外,WEB浏览器,SMTP/POP服务器,web服务器等都是以这个为基础的。下面就是一个国家和语言代码的例子:
| 语言/国家代码 | 描述 |
|---|---|
|
en_US |
美国英语 |
|
ru_RU |
俄语 |
|
zh_CN |
简体中文 |
一些语言不使用 ASCII 编码,它们使用8-位, 宽或多字节的字符, 更多的信息请参考 multibyte(3) 。 比较老的应用程序可能会无法识别它们, 并误认为是控制字符。 比较新的应用程序通常会认出 8-位字符。 随实现的不同, 用户可能不得不将宽或多字节字符支持编入应用程序, 或进行一些额外的配置, 才能够正常使用它们。 要输入和处理宽或多字节字符, FreeBSD Ports Collection 已经为每种语言提供了不同的程序。 请参考各个 FreeBSD Port 中的 I18N 文档。
特别需要指出的是, 用户可能需要查看应用程序的文档, 以确定如何正确地配置它, 或需要为 configure/Makefile/编译器 指定什么样的参数。
记住下面这些:
特定语言的简单C字符集 (参见 multibyte(3) ),例如 ISO8859-1, ISO8859-15, KOI8-R, CP437。
宽字节或多字节编码,如EUC, Big5。
您可以在 IANA Registry 检查一下现行的字符集列表。
|
与此不同的是, FreeBSD 使用与 X11-兼容的本地编码模式。 |
通常只要在登入shell里面设置
LANG
为本地化, 一般通过设置用户的
~/.login_conf
或用户shell的启动文件(
~/.profile
,
~/.bashrc
,
~/.cshrc
)。没有必要设置
LC_CTYPE
,
LC_CTIME
。 更多的信息请参考特定语言的FreeBSD文档。
您应当在您的配置文件中设置下面两个变量:
LANG
为POSIX®设置本地化语言功能。
MM_CHARSET
应用程序的MIME字符集。
这包括用户的shell配置,特定的应用配置和X11配置。
这种方法允许把本地化名称和MIME字符集的环境变量赋给可能的shell, 而不是加到每个特定shell的启动文件里面。 用户级设置 Level Setup 允许普通用户自己完成这个设置,而 管理员级设置 需要超级用户权限。
这有一个设置用户根目录文件 .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)
检查用户的登入分类在 /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
以便使在 /etc/login.conf 中新增的配置生效。
使用
vipw
添加新用户,看起来像下面这样:
user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh
用
adduser
添加新用户看起来像下面这样:
在
/etc/adduser.conf
里面设置
defaultclass = 语言
。应该记住,您必须为使用其它语言的所有用户设置
缺省
类别。
每一次使用 adduser(8) 的时候,一个特定语言的可选择性回答会像下面这样给出:
Enter login class: default []:
如果您打算给每一个用户使用另外一种语言,您应该这样:
# adduser -class language
|
不推荐使用这种方法,因为它需要给每一个可能的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/shared/skel/dot.profile (和前面的 /etc/profile 一样),或者 /usr/shared/skel/dot.login (和前面的 /etc/csh.login 一样)。
对于X11:
在 $HOME/.xinitrc 里面:
LANG=de_DE.ISO8859-1; export LANG
或者:
setenv LANG de_DE.ISO8859-1
依赖您的shell(看上面)。
对于所有的简单C字符集,在 /etc/rc.conf 中用正在讨论的语言设置正确的控制台字符:
font8x16=font_name font8x14=font_name font8x8=font_name
这儿的 font_name 来自于 /usr/shared/syscons/fonts 目录, 不带 .fnt 后缀。
如果需要的话, 还应通过
sysinstall
来配置与单字节 C 字符集对应的 keymap 和 screenmap。 在 sysinstall 中, 选择
之后选择
即可进行配置。 除此之外, 您也可以在
/etc/rc.conf
中加入类似下面的配置:
scrnmap=screenmap_name keymap=keymap_name keychange="fkey_number sequence"
这儿的 screenmap_name 是来自 /usr/shared/syscons/scrnmaps 目录, 不带 .scm 后缀。 一个带影射字体的屏幕布局通常被作为一个工作区, 用来在VGA适配器字体矩阵上扩展8位到9位。 如果屏幕字体是使用一个8位的排列,要移动这些字母离开这些区域。
如果您在 /etc/rc.conf 里面启用了moused daemon:
moused_enable="YES"
那么需要在下一段检查鼠标指针信息。
默认情况下, syscons(4) 驱动程序的鼠标指针在字符集中占用0xd0-0xd3的范围。 如果您的语言使用这个范围,您必须把指针范围移出这个范围。 要绕过这个问题, 需要在 /etc/rc.conf 中加入:
mousechar_start=3
这里, keymap_name 来自于 /usr/shared/syscons/keymaps 目录, 但去掉了 .kbd 后缀。 如果不确定应该使用哪一个键盘布局, 则可以使用 kbdmap(1) 来测试, 而无需反复重启。
通常,
keychange
是设定功能键时, 匹配选定的终端类型来说是必需的, 因为功能键序列无法在键盘布局中定义。
此外您还应该检查并确认在
/etc/ttys
中已经为所有的
ttyv*
项配置了正确的终端类型。 目前, 相关的默认定义是:
| 字符集设置 | 终端类型 |
|---|---|
|
ISO8859-1 or ISO8859-15 |
|
|
ISO8859-2 |
|
|
ISO8859-7 |
|
|
KOI8-R |
|
|
KOI8-U |
|
|
CP437 (VGA default) |
|
|
US-ASCII |
|
对于多字节字符语言,可以您的在 /usr/ports/language 目录中使用正确的FreeBSD port。一些port以控制台出现, 而系统把它作为串行vtty终端,因此, 必须为 X11 和伪串行控制台准备足够的vtty终端。 下面是在控制台中使用其他语言的应用程序的部分列表:
| 语言 | 特定区域 |
|---|---|
|
Traditional Chinese (BIG-5) |
|
|
Japanese |
|
|
Korean |
虽然X11不是FreeBSD计划的一部分, 但我们已经为FreeBSD用户包含了一些信息。 具体细节可以参考 Xorg Web 站点 或是您使用的 X11 Server 的网站。
在 ~/.Xresources 里面,您可以适当调整特定应用程序的I18N设置(如字体,菜单等)。
安装 Xorg 服务器 ( x11-servers/xorg-server ), 然后安装对应语言的 TrueType® 字体。 请设置正确的地区信息, 这将让您能够在菜单和其它地方看到所选择的语言。
一些简单的C字符集通常是用硬编码来编码进打印机的。更宽或多位的字符集需要特定的设置, 我们推荐使用apsfilter。您也可以使用特定语言转换器把文档转换为 PostScript®或PDF格式。
FreeBSD 的快速文件系统 (FFS) 是完全支持 8-位 字符的, 因此它可以被用于任何简单的 C 字符集 (参见 multibyte(3) ), 但在文件系统中不会保存字符集的名字; 也就是说, 它不加修改地保存 8-位信息, 而并不知道如何编码。 正式说来, FFS 目前还不支持任何形式的宽或多字节字符集。 不过, 某些宽或多字符集提供了独立的针对 FFS 的补丁来帮助启用关于它们的支持。 目前这些要么是无法移植的, 要么过于粗糙, 因此我们不打算把它们加入到源代码中。 请参考相关语言的 Web 站点, 以了解关于这些补丁的进一步情况。
FreeBSD MS-DOS®已经能够配置成用在MS-DOS®上,Unicode字符集和可选的FreeBSD文件系统字符集的更多信息, 请参考 mount_msdosfs(8) 联机手册。
许多FreeBSD Ports已经支持I18N了。他们中的一些都用-I18N作标记。 这些和其他很多程序已经内建I18N的支持,不需要考虑其他的事项了。
然而一些像MySQL这样的应用程序需要重新配置字符集,可在 Makefile 里面设置,或者直接把参数传递给configure。
关于KOI8-R编码的更多信息请查阅 KOI8-R参考(Russian Net Character Set) 。
把下面的行加入到您的 ~/.login_conf 文件:
me:My Account:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R:
参看前面的设置 本地化 的例子。
把下面一行加到 /etc/rc.conf :
mousechar_start=3
并在 /etc/rc.conf 里面增加如下设置:
keymap="ru.utf-8" scrnmap="utf-82cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8"
对于
/etc/ttys
里面的
ttyv*
记录,要使用
cons25r
作为终端类型。
参看前面的设置 控制台 的例子。
既然绝大多数带俄语字符的打印机遵循CP866的标准, 那么需要一个针对KOI8-R到CP866转换的特定输出过滤器。这样的一个过滤器默认的安装在 /usr/libexec/lpr/ru/koi2alt 。 一个支持俄语的打印机的 /etc/printcap 记录看起来是这样的:
lp|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® 文件系统后,启用对俄语文件名支持的 fstab(5) 记录:
/dev/ad0s2 /dos/c msdos rw,-Wkoi2dos,-Lru_RU.KOI8-R 0 0
选项
-L
用于选择地区名称, 而
-W
则用于设置字符转换表。 要使用
-W
选项, 则一定要首先挂接
/usr
, 然后再挂接 MS-DOS® 分区, 因为转换表是放在
/usr/libdata/msdosfs
的。 要了解进一步的细节, 请参考
mount_msdosfs(8)
联机手册。
首先请进行前面介绍的 非-X 的本地化设置 。
如果您正使用 Xorg, 请安装 x11-fonts/xorg-fonts-cyrillic package。
检查您
/etc/X11/xorg.conf
文件中的
"Files"
小节。 下面的行, 应加到任何其它
FontPath
项之前:
FontPath "/usr/local/lib/X11/fonts/cyrillic"
|
请查看 ports 中的其它西里尔字体。 |
要激活俄语键盘, 需要在
xorg.conf
文件的
"Keyboard"
小节中加入下列内容:
Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:toggle"
要确信
XkbDisable
已经关闭 (注释掉) 了。
RUS/LAT的切换用 CapsLock 。老的 CapsLock 功能可以通过 Shift + CapsLock 来模拟(只有在LAT模式的时候)。
使用
grp:toggle
时, RUS/LAT 切换键将是
右 Alt
, 而使用
grp:ctrl_shift_toggle
则表示切换键是
Ctrl
+
Shift
。 使用
grp:caps_toggle
时, RUS/LAT 切换键则是
CapsLock
。 旧的
CapsLock
功能仍可通过
Shift
+
CapsLock
(只对 LAT 模式有效)。 由于不明原因,
grp:caps_toggle
在 Xorg 中无法使用。
如果您的键盘上有 "Windows®" 键, 但发现 RUS 模式下, 某些非字母键映射不正常, 则应在您的 xorg.conf 文件中加入下面这行:
Option "XkbVariant" ",winkeys"
|
俄语的 XKB 键盘可能并不为某些不具备本地化功能的应用程序所支持。 |
|
本地化程序最低限度应在程序启动时调用
参见 KOI8-R for X Window 以获得关于对 X11 应用进行本地化的指导。 |
FreeBSD-Taiwan计划有一个使用很多中文ports的中文化指南在
http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/
。 目前,
FreeBSD 中文化指南
的维护人员是 沈俊兴
statue@freebsd.sinica.edu.tw
。
沈俊兴
statue@freebsd.sinica.edu.tw
利用 FreeBSD-Taiwan 的
zh-L10N-tut
建立了
Chinese FreeBSD Collection (CFC)
。 相关的 packages 和脚本等可以在
ftp://freebsd.csie.nctu.edu.tw/pub/taiwan/CFC/
找到。
Slaven Rezic eserte@cs.tu-berlin.de 写了一个在 FreeBSD 机器下如何使用日尔曼语言的德语指南。 这份德语教程可以在 http://user.cs.tu-berlin.de/~eserte/FreeBSD/doc/umlaute/umlaute.html 找到。
Nikos Kokkalis nickkokkalis@gmail.com 撰写了关于在 FreeBSD 上支持希腊语的完整文章, 在 http://www.freebsd.org/doc/el/articles/greek-language-support/ 。 请注意这篇文章 只有 希腊语的版本。
日语本地化请参考 http://www.jp.FreeBSD.org/ ,韩语参考 http://www.kr.FreeBSD.org/ 。
一些 FreeBSD 的贡献者已经将部分 FreeBSD 文档翻译成了其他语言。 您可在 主站 以及 /usr/shared/doc 找到。
Last modified on : February 18, 2025 by Fernando Apesteguía