第 25 章。本地化 - i18n/L10n 使用和设置

25.1. 概述

FreeBSD 是一个分布式项目,用户和贡献者遍布世界各地。因此,FreeBSD 支持多种语言的本地化,允许用户以非英语语言查看、输入或处理数据。用户可以选择大多数主要语言,包括但不限于:中文、德语、日语、韩语、法语、俄语和越南语。

术语“国际化”已缩写为 i18n,它表示 internationalization 的第一个和最后一个字母之间的字母数。L10n 使用相同的命名方案,但来自 localization。i18n/L10n 方法、协议和应用程序允许用户使用他们选择的语言。

本章讨论 FreeBSD 的国际化和本地化功能。阅读完本章后,您将了解

  • 如何构造区域设置名称。

  • 如何为登录 shell 设置区域设置。

  • 如何为非英语语言配置控制台。

  • 如何为不同的语言配置 Xorg。

  • 如何查找符合 i18n 标准的应用程序。

  • 在哪里可以找到有关配置特定语言的更多信息。

在阅读本章之前,您应该

25.2. 使用本地化

本地化设置基于三个组件:语言代码、国家/地区代码和编码。区域设置名称由这些部分构成,如下所示

LanguageCode_CountryCode.Encoding

LanguageCodeCountryCode 用于确定国家/地区和具体的语言变体。常用语言和国家/地区代码 提供了一些 LanguageCode_CountryCode 的示例

表 1. 常用语言和国家/地区代码
LanguageCode_CountryCode描述

en_US

英语,美国

ru_RU

俄语,俄罗斯

zh_TW

繁体中文,台湾

可以通过键入以下命令找到可用的所有区域设置的完整列表:

% locale -a | more

要确定当前的区域设置:

% locale

语言特定的字符集,如 ISO8859-1、ISO8859-15、KOI8-R 和 CP437,在 multibyte(3) 中进行了描述。活动字符集列表可以在 IANA 注册表 中找到。

某些语言,如中文或日语,无法使用 ASCII 字符表示,需要使用宽字符或多字节字符进行扩展语言编码。宽字符或多字节编码的示例包括 EUC 和 Big5。较旧的应用程序可能会将这些编码误认为是控制字符,而较新的应用程序通常会识别这些字符。根据实现的不同,用户可能需要使用宽字符或多字节字符支持编译应用程序,或正确配置应用程序。

FreeBSD 使用与 Xorg 兼容的区域设置编码。

本节的其余部分描述了在 FreeBSD 系统上配置区域设置的各种方法。下一节将讨论查找和编译具有 i18n 支持的应用程序的注意事项。

25.2.1. 为登录 Shell 设置区域设置

区域设置是在用户的 ~/.login_conf 或用户的 shell 的启动文件中配置的:~/.profile~/.bashrc~/.cshrc

应设置两个环境变量:

  • LANG,用于设置区域设置

  • MM_CHARSET,用于设置应用程序使用的 MIME 字符集

除了用户的 shell 配置之外,还应为特定的应用程序配置和 Xorg 配置设置这些变量。

有两种方法可以进行所需的变量赋值:登录类 方法(推荐方法)和 启动文件 方法。接下来的两节将演示如何使用这两种方法。

25.2.1.1. 登录类方法

第一种方法是推荐的方法,因为它为每个可能的 shell 分配了所需的区域设置名称和 MIME 字符集的环境变量。此设置可以由每个用户执行,也可以由超级用户为所有用户配置。

此最小示例在单个用户的 home 目录的 .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,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 字符集:

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:

有关这些变量的更多详细信息,请参阅 login.conf(5)。请注意,它已经包含预定义的 russian 类。

每当编辑 /etc/login.conf 时,请记住执行以下命令以更新功能数据库:

# cap_mkdb /etc/login.conf

对于最终用户,需要在其 ~/.login_conf 上运行 cap_mkdb 命令才能使任何更改生效。

25.2.1.1.1. 更改登录类的实用程序

除了手动编辑 /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 时指定要设置的区域设置:

# adduser -class language

如果使用 pw 添加新用户,请按如下方式指定区域设置:

# pw useradd user_name -L language

要更改现有用户的登录类,可以使用 chpass。以超级用户身份调用它,并提供要编辑的用户名的参数。

# chpass user_name

25.2.1.2. Shell 启动文件方法

不推荐使用第二种方法,因为每个使用的 shell 都需要手动配置,每个 shell 都有不同的配置文件和不同的语法。例如,要为 sh shell 设置德语,可以将以下行添加到 ~/.profile 中,以仅为该用户设置 shell。这些行也可以添加到 /etc/profile/usr/share/skel/dot.profile 中,以将该 shell 设置为所有用户:

LANG=de_DE.ISO8859-1; export LANG
MM_CHARSET=ISO-8859-1; export MM_CHARSET

但是,csh shell 的配置文件名称和使用的语法不同。以下是 ~/.login/etc/csh.login/usr/share/skel/dot.login 的等效设置:

setenv LANG de_DE.ISO8859-1
setenv MM_CHARSET ISO-8859-1

更复杂的是,在 ~/.xinitrc 中配置 Xorg 所需的语法也取决于 shell。第一个示例适用于 sh shell,第二个示例适用于 csh shell:

LANG=de_DE.ISO8859-1; export LANG
setenv LANG de_DE.ISO8859-1

25.2.2. 控制台设置

控制台提供了一些本地化的字体。要查看可用的字体列表,请键入 ls /usr/share/syscons/fonts。要配置控制台字体,请在 /etc/rc.conf 中指定 font_name(不带 .fnt 后缀):

font8x16=font_name
font8x14=font_name
font8x8=font_name

可以通过将以下内容添加到 /etc/rc.conf 中来设置键盘映射和屏幕映射:

scrnmap=screenmap_name
keymap=keymap_name
keychange="fkey_number sequence"

要查看可用的屏幕映射列表,请键入 ls /usr/share/syscons/scrnmaps。在指定 screenmap_name 时,请不要包含 .scm 后缀。通常需要具有相应映射字体的屏幕映射作为解决方法,以便在 VGA 适配器的字体字符矩阵上将第 8 位扩展到第 9 位,以便如果屏幕字体使用第 8 位列,则将字母移出伪图形区域。

要查看可用的键盘映射列表,请键入 ls /usr/share/syscons/keymaps。在指定 keymap_name 时,请不要包含 .kbd 后缀。要测试键盘映射而无需重新引导,请使用 kbdmap(1)

keychange 条目通常是必需的,用于将功能键编程以匹配所选终端类型,因为无法在键盘映射中定义功能键序列。

接下来,在 /etc/ttys 中为所有虚拟终端条目设置正确的控制台终端类型。字符集的定义终端类型 总结了可用的终端类型。

表 2. 字符集的定义终端类型
字符集终端类型

ISO8859-1 或 ISO8859-15

cons25l1

ISO8859-2

cons25l2

ISO8859-7

cons25l7

KOI8-R

cons25r

KOI8-U

cons25u

CP437 (VGA 默认)

cons25

US-ASCII

cons25w

对于使用宽字符或多字节字符的语言,请从 FreeBSD Ports Collection 中安装该语言的控制台。Ports Collection 中可用的控制台 总结了可用的端口。安装后,请参阅端口的 pkg-message 或手册页以获取配置和使用说明。

表 3. Ports Collection 中可用的控制台
语言端口位置

繁体中文 (BIG-5)

chinese/big5con

中文/日语/韩语

chinese/cce

中文/日语/韩语

chinese/zhcon

日语

chinese/kon2

日语

japanese/kon2-14dot

日语

japanese/kon2-16dot

如果在 /etc/rc.conf 中启用了 moused,则可能需要其他配置。默认情况下,syscons(4) 驱动程序的鼠标光标占用字符集中的 0xd0-0xd3 范围。如果语言使用此范围,请通过将以下行添加到 /etc/rc.conf 中来移动光标的范围:

mousechar_start=3

25.2.3. Xorg 设置

X 窗口系统 描述了如何安装和配置 Xorg。在配置 Xorg 进行本地化时,FreeBSD Ports 集合提供了额外的字体和输入法。应用程序特定的国际化设置(例如字体和菜单)可以在 ~/.Xresources 中进行调整,并允许用户在图形应用程序菜单中查看其选择的语言。

X 输入法 (XIM) 协议是 Xorg 用于输入非英语字符的标准。 可用的输入法 总结了 FreeBSD Ports 集合中可用的输入法应用程序。还提供额外的 Fcitx 和 Uim 应用程序。

表 4. 可用的输入法
语言输入法

中文

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

25.3. 查找国际化应用程序

国际化应用程序使用库下的国际化套件进行编程。这允许开发人员编写一个简单的文件并将显示的菜单和文本翻译成每种语言。

FreeBSD Ports 集合 包含许多应用程序,这些应用程序内置支持多种语言的宽字符或多字节字符。此类应用程序在其名称中包含 i18n 以便于识别。但是,它们并不总是支持所需的语言。

某些应用程序可以使用特定的字符集进行编译。这通常在端口的 Makefile 中完成,或者通过向配置传递一个值来完成。有关如何确定所需的配置值或端口的 Makefile 以确定构建端口时要使用哪些编译选项的更多信息,请参阅相应 FreeBSD 端口源代码中的国际化文档。

25.4. 特定语言的区域设置配置

本节提供了将 FreeBSD 系统本地化为俄语的配置示例。然后提供了一些用于本地化其他语言的其他资源。

25.4.1. 俄语 (KOI8-R 编码)

本节显示了将 FreeBSD 系统本地化为俄语所需的特定设置。有关每种设置类型的完整说明,请参阅 使用本地化

要为登录 Shell 设置此区域设置,请将以下行添加到每个用户的 ~/.login_conf

me:My Account:\
	:charset=KOI8-R:\
	:lang=ru_RU.KOI8-R:

要配置控制台,请将以下行添加到 /etc/rc.conf

keymap="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

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® 文件系统中俄语文件名的支持,请在将条目添加到 /etc/fstab 时包含 -L 和区域设置名称

/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 中的“文件”部分。必须在任何其他 FontPath 条目之前添加以下行

FontPath   "/usr/local/lib/X11/fonts/cyrillic"

Ports 集合中提供了其他西里尔字体。

要激活俄语键盘,请将以下内容添加到 /etc/xorg.conf 的“键盘”部分

Option "XkbLayout"   "us,ru"
Option "XkbOptions"  "grp:toggle"

确保该文件中已注释掉 XkbDisable

对于 grp:toggle 使用 右 Alt,对于 grp:ctrl_shift_toggle 使用 Ctrl+Shift。对于 grp:caps_toggle 使用 CapsLock。旧的 CapsLock 功能仅在 LAT 模式下使用 Shift+CapsLock 仍然可用。由于某种未知原因,grp:caps_toggle 在 Xorg 中不起作用。

如果键盘有“Windows®”键,并且某些非字母键映射不正确,请将以下行添加到 /etc/xorg.conf

Option "XkbVariant" ",winkeys"

俄语 XKB 键盘可能无法与非本地化应用程序一起使用。最小本地化应用程序应在程序的早期调用 XtSetLanguageProc (NULL, NULL, NULL); 函数。

有关本地化 Xorg 应用程序的更多说明,请参阅 http://koi8.pp.ru/xwin.html。有关 KOI8-R 编码的更多常规信息,请参阅 http://koi8.pp.ru/

25.4.2. 其他特定语言资源

本节列出了一些用于配置其他区域设置的其他资源。

繁体中文(台湾)

FreeBSD-Taiwan 项目在 http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/ 提供了 FreeBSD 的中文 HOWTO。

希腊语本地化

有关 FreeBSD 中希腊语支持的完整文章,请参阅 此处,仅限希腊语,作为官方 FreeBSD 希腊语文档的一部分。

日语和韩语本地化

对于日语,请参阅 http://www.jp.FreeBSD.org/,对于韩语,请参阅 http://www.kr.FreeBSD.org/

非英语 FreeBSD 文档

一些 FreeBSD 贡献者已将部分 FreeBSD 文档翻译成其他语言。它们可以通过 FreeBSD 网站 上的链接或 /usr/share/doc 中获得。


上次修改时间:2024 年 9 月 23 日,作者 Fernando Apesteguía