Locale (简体中文)
在linux上Locales用来定义用户所使用的语言。因为locales还定义了用户使用的字符集,所以,当语言中含有非ASCIIA字符时,设定好正确的locale就显得非常重要了。
Locales是用以下的格式来定义的:
<lang>_<territory>.<codeset>[@<modifiers>]
Contents
开启所需的locales
设置 locale 前,需要先准备需要的 locale。要列出所有启用的locale,使用:
$ locale -a
要开启 locale,在文件/etc/locale.gen
中取消相应locale前的注释,此文件包含新系统支持的所有locale。加上注释就会禁用locale。开启需要的locale之后,你必须以root身份运行locale-gen来更新它们:
# locale-gen
想要显示正在使用的locale,运行:
$ locale
英语示例
想要设置一个英文UTF-8的系统,需要开启en_US.UTF-8。但是考虑到某些尚不支持UTF-8的程序的兼容性,建议同时选上所有其它以en_US开头的locale。
首先,在/etc/locale.gen
中启用以下locale:
en_US.UTF8 UTF-8 en_US ISO-8859-1
然后,以root身份运行locale-gen来更新它们:
# locale-gen
设定系统全局locale
要设置整个系统使用的 locale,在/etc/locale.conf
中设置LANG
变量。
locale.conf
中可以设置一系列环境变量设置,每行一个。可以包含LANG
变量和LC_ALL
外的所有LC_*
变量。
/etc/locale.conf
LANG="en_US.UTF-8"
高级示例:
/etc/locale.conf
# Enable UTF-8 with Australian settings. LANG="en_AU.UTF-8" # Keep the default sort order (e.g. files starting with a '.' # should appear at the start of a directory listing.) LC_COLLATE="C" # Set the short date to YYYY-MM-DD (test with "date +%c") LC_TIME="en_DK.UTF-8"
也可以通过localectl
修改locale.conf
,例如:
# localectl set-locale LANG="de_DE.utf8"
详情参阅 man 1 localectl
和 man 5 locale.conf
。
设置后备 locales
使用 gettext 翻译的软件会按照 LANGUAGE
选择使用的语言。用户通过这个变量指定一个locale 列表,如果前面的 locale 缺少翻译,会自动使用后面的 locale 显示界面。 例如下面游戏使用简体中文,没有翻译时使用英文:
~/.bashrc
export LANGUAGE="zh_CN:en_GB:en"
or system-wide
/etc/locale.conf
LANG="zh_CN" export LANGUAGE="zh_CN:en_GB:en"
设定每个用户的locale
就像我们刚才讨论过的那样,有些用户可能想定义一个不同于系统全局的locale。在这种情况下,你可以在~/.bashrc
中自定义LANG
。
比如你可以使用en_AU.UTF-8
:
export LANG=en_AU.UTF-8
当你的~/.bashrc
被重新读入时,你的locales会被立即更新。可以重新登陆,或者可以输入:
$ source ~/.bashrc
设置排序规则
排序规则有一些不同。排序是一个傻傻的野兽,然而不同的locale处理方式不同。为了避免出现一些潜在的问题,Arch 曾经在/etc/profile
中设置LC_COLLATE="C"
。然而,现在这个方法不推荐使用。想要启用此方式,只需要添加下面这行到~/.bashrc
:
export LC_COLLATE="C"
现在 ls 命令会把 dotfiles 排在最前面,然后是大写和小写的文件名。注意如果没有 LC_COLLATE 设定的话,对 locale 敏感的程序会使用 LC_ALL 或者 LOCALE 定义的方式排序,但是 LC_COLLATE 设置会被 LC_ALL 覆盖。为了解决这个问题,添加下面这两行:
export LC_ALL= export LC_COLLATE="C"
设定一周的起始日
在很多国家,每周的第一天是星期一。在/usr/share/i18n/locales/<your_locale>
的LC_TIME
区段,改写或添加如下几行:
week 7;19971130;5 first_weekday 2 first_workday 2
然后运行:
locale-gen
疑难解答
我的终端不支持UTF-8字符
很不幸某些终端不支持UTF-8。这样的话,你得换另一种终端程序。以下是支持UTF-8的终端列表:
- gnome-terminal
- gnustep-terminal
- konsole
- mlterm
- urxvt (rxvt-unicode)
- xfce-terminal
- xterm
xterm在我这里不支持UTF-8字符
只有当你用uxterm或xterm -u8运行xterm时,它才能支持UTF-8。
Gnome-terminal 不支持 UTF-8
添加下面一行到 /etc/environment
文件:
LANG="en_US.UTF-8"
重启系统,gnome-terminal 就会正常工作了。