分类: LINUX
2013-06-21 14:40:54
Gentoo Linux本地化指南
1. 时区
你需要选择时区让系统知道你的地理位置,以保持正确的时间。在/usr/share/zoneinfo中查找你的时区。然后在/etc/conf.d/clock中设置时区。请忽略/usr/share/zoneinfo/Etc/GMT*时区,因为它们的名字并不表示所指的地区。比如,GMT-8实际上是GMT+8。
代码 1.1: 设置时区信息 |
# ls /usr/share/zoneinfo (假设你要使用布鲁塞尔) (首先复制正确的地区到localtime) # cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime (现在指定时区) # nano -w /etc/conf.d/clock TIMEZONE="Europe/Brussels" # date Wed Mar 8 00:46:05 CET 2006 |
注意: 确保代表时区的英文缩写(本案例中为"CET")正是你的地区。 |
注意: 你可以做一个用户级的设置,在shell的rc文件(如bash的.bash_profile)中将TZ变量的值设为/usr/share/zoneinfo下的任何东西。本案例中TZ="Europe/Berlin"。 |
2. 硬件时钟
Gentoo Linux安装过程中,大多数情况下硬件时钟都是被设成UTC(或GMT,格林威治标准时间),而时区则定为实际的本地时间。如果出于某种原因,你需要将硬件时钟设为非UTC,那么你就要编辑/etc/conf.d/clock,将CLOCK的值由UTC改为local。
代码 2.1: 本地时钟vs.格林威治时钟 |
(推荐:) CLOCK="UTC" (或者:) CLOCK="local" |
3. Locale系统
locale是什么?
一份Locale是一组信息的集合,大多数程序利用它来确定特定的国家和语言设置。这些locale以及它们包含的数据是系统库的一部分,可以在大多数系统中的/usr/share/locale目录下找到。locale的名称通常命名为ab_CD的形式,其中ab是两个(或三个)字母的语言代号(在ISO-639中指定),CD是两个字母的国家代号(在ISO-3166中指定)。一些变量常常附加在locale名称的后面,例如en_GB.UTF-8或de_DE@euro。更多关于locale及相关的文章请考察。
locale环境变量
Locale的设置保存在环境变量中。典型情况下设置在/etc/env.d/02locale(系统全局设置)和~/.bashrc(特定用户设置)文件中。这些变量分别决定locale各方面的设置,下面的表格给出了具体说明。所有变量都会取一个前述ab_CD格式的locale名称作为值。
变量名 | 说明 |
LANG | 一次性定义全部locale设置,但是允许通过下面的LC_*设置进一步作单项定制。 |
LC_COLLATE | 定义字符串的字母排序方式。例如这会影响目录列表的分类显示。 |
LC_CTYPE | 定义系统的字符处理性能。这决定哪些字符能被视为字母、数字,等等。这个变量如果生效还决定所使用的字符集。 |
LC_MESSAGES | 使用基于消息机制的本地化方式的应用程序的本地化信息(绝大多数GNU程序皆属此类,请看下面的章节以获知如何让支持以及不支持此机制的程序本地化)。 |
LC_MONETARY | 定义货币单位和货币型数值的格式。 |
LC_NUMERIC | 定义非货币型数值的格式。影响到千位分隔符和小数分隔符等。 |
LC_TIME | 定义日期和时间的格式。 |
LC_PAPER | 定义默认的纸张尺寸。 |
LC_ALL | 一个用于覆写所有其它设置的特殊变量。 |
注意: 有些程序在编写时假定按照传统的英语字母表顺序排序,而有些locale,最明显的是爱沙尼亚语的,使用一种不同的排序方式。因此在作系统全局设置时,建议明确地将LC_COLLATE设定为C。 |
警告: LC_ALL设置之后不可被覆写,因此强烈反对使用。除非作测试请不要使用它,并且决不要把它设置在启动文件中。 |
最典型的情况是用户只在全局基础上设置LANG变量。这个例子为unicode的德语locale:
代码 3.1: 在/etc/env.d/02locale中设置默认的系统locale |
LANG="de_DE.UTF-8" LC_COLLATE="C" |
注意: 如果要使用欧元货币符号(?),则使用de_DE@euro作为LANG的值。 |
也有可能,特别在一个较传统的UNIX环境中很普遍,保留全局设置不变,比如locale为“C”。用户仍可以在他们自己的shell RC文件中指定首选的locale:
代码 3.2: 在~/.bashrc中设置用户locale |
export LANG="de_DE.UTF-8" export LC_COLLATE="C" |
另一种系统配置方式是保留默认的C locale,同时要能够表现UTF-8字符。这种选择可以通过在/etc/env.d/02locale中使用下述设置来实现:
代码 3.3: 使用传统的C locale同时指定UTF-8 |
LC_CTYPE=de_DE.UTF-8 |
使用以上所述的做法,用户将能够正确地看到本地化的文件名,而不是被强制为你首选的语言。
为了让支持基于消息机制的本地化的程序运行,你可能需要设定nls(本地语言支持)USE标记来编译程序。
设置好正确的locale后,一定要更新环境变量使系统知道所做的更改:
代码 3.4: 更新环境 |
(更新系统全局默认的locale:) # env-update && source /etc/profile (更新特定用户的locale:) $ source ~/.bashrc |
更新环境后,你需要按下Ctrl-Alt-Backspace杀死X服务器,登出,然后以用户身份登入。
现在,检验一下所做的更改是否已经生效了:
代码 3.5: 检验环境更改 |
$ locale
|
另外还有一个本地化变量叫做LINGUAS。它会影响到基于gettext的程序将会安装的本地化文件。它还能决定某些特殊软件包的本地化,比如kde-base/kde-l10n和app-office/openoffice。这个变量的值为一组以空格隔开的语言代码,建议将其设置在/etc/make.conf中:
代码 3.6: 在make.conf中设置LINGUAS |
# nano -w /etc/make.conf (加入LINGUAS变量中。例如,德语、芬兰语和英语:) LINGUAS="de fi en" |
生成指定的Locale
可能你在系统中只要用到一个或者两个locale。你可以在/etc/locale.gen中指定所需的的locale。
代码 3.7: 添加locale到/etc/locale.gen |
en_GB ISO-8859-1 en_GB.UTF-8 UTF-8 de_DE ISO-8859-1 de_DE@euro ISO-8859-15 |
下一步是执行locale-gen。它会生成/etc/locale.gen文件中指定的所有locale。
注意: locale-gen在glibc-2.3.6-r4及更新版本中可用。如果你的glibc版本较旧,那么现在就应该更新了。 |
你可以通过执行locale -a来检验所选的locale是否可用。
4. 控制台下的键盘布局
控制台下使用的键盘布局通过/etc/conf.d/keymaps中的KEYMAP变量来设定。其有效值可以在/usr/share/keymaps/{arch}/下找到。i386下进一步细分了布局(如qwerty/、azerty/等)。有些语言有多个选择项,你可能要试验后再决定哪个最适合自己的需求。
代码 4.1: 设置控制台的键盘映射 |
KEYMAP="de" KEYMAP="de-latin1" KEYMAP="de-latin1-nodeadkeys" |
5. X服务器下的键盘布局
X服务器下使用的键盘布局通过/etc/X11/xorg.conf中的XkbLayout选项来指定。
代码 5.1: 设置X的键盘映射 |
Section "InputDevice" Identifier "Keyboard1" ... Option "XkbLayout" "de" #Option "XkbModel" "pc105" ## 这适用于国际键盘。 # Option "XkbVariant" "nodeadkeys" ## 这将被用于xterm的输入 ... |
如果你有一个国际键盘布局,则必须将XkbModel选项设置为pc102或pc105,这样才可以映射你键盘上附加的特殊按键。
Deadkey允许你按下某些键不马上显示,而是与另一个字母组合得到一个单一的字符如é、è、á、à……等等。将XkbVariant设置为nodeadkeys允许在X终端中输入这些特殊字符。
如果想在多个键盘布局之间切换(例如英语和俄语),你要做的全部事情就是在xorg.conf中添加几行内容,指定想要的布局及快捷键命令。
代码 5.2: 在两个键盘布局之间切换 |
Section "InputDevice" Identifier "Keyboard1" ... Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll" |
这里,XkbOptions允许你通过简单地按下Alt-Shift来在各个键盘布局之间转换。得益于grp_led:scroll选项,也可以通过控制Scroll Lock灯亮或灯灭来转换。这是个得心应手的视觉指示器,指出此时你正在使用的键盘布局。
6. KDE
对于KDE你必须安装kde-base/kde-l10n和app-office/koffice-l10n软件包。这些包与前面描述的有关。
7. 控制台下的欧元符号
为了让控制台显示欧元符号,你需要将/etc/conf.d/consolefont中的CONSOLEFONT设置为/usr/share/consolefonts/下的一个文件(不含.psfu.gz)。lat9w-16有欧元符号。
代码 7.1: 设置控制台字体 |
CONSOLEFONT="lat9w-16" |
应检验一下CONSOLEFONT是否在boot启动级别:
代码 7.2: 检验启动级别是否正确 |
# rc-update -v show | grep -i consolefont
|
如果显示结果没有关于CONSOLEFONT的启动级别,就要把它添加到正确的级别:
代码 7.3: 添加consolefont到boot |
# rc-update add consolefont boot
|
8. X中的欧元符号
绝大部分应用程序
要让欧元符号在X中正确地工作有点麻烦。首先要做的事是修改/usr/share/fonts/misc/fonts.alias中fixed和variable的定义,将末尾的iso8859-1替换为iso8859-15。
代码 8.1: 设置默认的X字体 |
fixed -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-15 variable -*-helvetica-bold-r-normal-*-*-120-*-*-*-*-iso8859-15 |
有些应用程序使用它们自己的字体,你必须分别告诉它们使用一个含欧元符号的字体。你可以在.Xdefaults中做特定用户级别的设置(可以将这个文件复制到/etc/skel/下给新用户使用),也可以在/usr/share/X11/app-defaults/下的一个资源文件中为任何应用程序做全局级别的设置(如xterm)。一般在这些文件中你只要修改现有的一行内容,而不需要添加新的一行。举个例子,更改我们的xterm的字体:
代码 8.2: 为xterm设定字体 |
(在你的主目录下) $ echo 'XTerm*font: fixed' >> .Xresources $ xrdb -merge .Xresources |
(X)Emacs中的欧元符号
要在(X)Emacs中使用欧元符号,将下面的内容加入.Xdefaults:
代码 8.3: 为emacs设定字体 |
Emacs.default.attributeFont: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-15 |
对于XEmacs(非纯Emacs),必须多做点事。在/home/user/.xemacs/init.el中加入:
代码 8.4: 为xemacs设定字体 |
(define-key global-map '(EuroSign) '[?]) |
注意: []中的符号为欧元符号 |