区域设置由三个部分构成:语言代码 (Language Code)、 国家代码 (Country Code) 和编码 (Encoding) 。 所以, 本地化语言名称由这三部分组成:
语言代码
_国家代码
.编码
为了指定 FreeBSD 系统使用某个特定语言, 用户需要确定特定的国家代码和语言代码( 国家代码能让应用程序知道使用哪种语言)。 以下是语言/国家代码的例子:
语言/国家代码 | 简介 |
---|---|
en_US | 英语(美国) |
ru_RU | 俄语(俄国) |
zh_CN | 简体中文(中国大陆) |
完整的可用区域设置代码列表, 可用输入以下命令获得:
%
locale -a
有些语言不使用 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上获得。
与此不同的是, FreeBSD 使用与 X11-兼容的本地编码模式。
在 FreeBSD Ports Collection 中, i18n 应用程序已经使用 i18n
来命名。
然而它们不是总支持需要的语言。
通常本地化只需要在 shell 里设置 LANG
变量,
一般通过用户的 ~/.login_conf
或用户 shell 启动配置文件:
(~/.profile
、 ~/.bashrc
和 ~/.cshrc
)
没必要设置本地化相关子集, 例如 LC_CTYPE
或 LC_CTIME
。
更多的信息请参考特定语言的 FreeBSD 文档。
您应当在您的配置文件中设置下面两个变量:
LANG
for POSIX®
setlocale(3) family functions
MM_CHARSET
应用程序的MIME字符集。
这包括用户的 shell 配置, 特定的应用配置和 Xorg 配置。
本节介绍两种方法设置本地化。 一种是(首选)就是 登录类(login class) 里指定环境变量。 另一种方法是把环境变量加到 启动文件 中去。
这种方法允许把本地化名称和 MIME 字符集的环境变量赋给可能的 shell ,而不是加到每个特定 shell 的启动文件里。 用户级设置 允许普通用户自己完成这个设置, 而 管理员级 则需要超级用户权限才能完成设置。
这里有个在用户家目录下的 .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
使用 vipw
添加新用户,修改 language
值:
user:password:1111:11:language
:0:0:User Name:/home/user:/bin/sh
使用 adduser
添加新用户, 配置语言:
在 /etc/adduser.conf
里配置 defaultclass = language
。
另外, 使用是会给出如何信息, 用于变更语言:
Enter login class: default []:
如果使用 adduser(8) 创建新用户:
也可用使用以下命令绕过 /etc/adduser.conf
设定的语言, 直接指定需要的语言:
#
adduser -class language
如果您使用 pw(8) 来添加新用户,可用这样:
#
pw useradd user_name -L 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/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
对于所有的简单 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 ,选择 ,
之后选择, 进行配置就可用了。除此之外, 您也可用直接在 /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-15 | cons25l1 |
ISO8859-2 | cons25l2 |
ISO8859-7 | cons25l7 |
KOI8-R | cons25r |
KOI8-U | cons25u |
CP437 (VGA default) | cons25 |
US-ASCII | cons25w |
对于宽或多字节字符的语言, 可以您的在 /usr/ports/language
目录中选择正确的 FreeBSD port 。
一些 port 以控制台形式出现, 而系统把它作为串行虚拟终端, 因此, 需要在 /etc/ttys
中为 Xorg 和 伪串行控制台准备足够的虚拟终端。
下面是在控制台中使用其他语言的应用程序的部分列表:
语言 | 特定区域 |
---|---|
Traditional Chinese (BIG-5) | chinese/big5con |
Japanese | japanese/kon2-16dot or japanese/mule-freewnn |
Korean | korean/han |
虽然 FreeBSD 默认不安装 Xorg ,但它可用通过 Ports Collection 安装。 如何安装请参考 Chapter 6, X Window 系统 。本节讨论它安装后的如何本地化 Xorg 。
在 ~/.Xresources
里面,您可以适当调整特定应用程序的 i18n 设置(如字体,菜单等)。
一些简单的 C 字符集通常是用硬编码来编码进打印机的。 宽或多字符的字符集需要特定的设置, 我们推荐使用 apsfilter 设置。 您也可以使用特定语言转换器把文档转换为 PostScript® 或 PDF 格式。
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>.