Difference between revisions of "Locale (简体中文)"

From ArchWiki
Jump to: navigation, search
(设定系统全局locale)
(设定每个用户的locale)
Line 68: Line 68:
  
 
详情参阅 {{ic|man 1 localectl}} 和 {{ic|man 5 locale.conf}}。
 
详情参阅 {{ic|man 1 localectl}} 和 {{ic|man 5 locale.conf}}。
 +
 +
== 设置后备 locales ==
 +
使用 gettext 翻译的软件会按照 {{Ic|LANGUAGE}} 选择使用的语言。用户通过这个变量指定一个[http://www.gnu.org/software/gettext/manual/gettext.html#The-LANGUAGE-variable locale 列表],如果前面的 locale 缺少翻译,会自动使用后面的 locale 显示界面。 例如下面游戏使用简体中文,没有翻译时使用英文:
 +
{{hc|~/.bashrc|2=
 +
export LANGUAGE="zh_CN:en_GB:en"
 +
}}
 +
or system-wide
 +
{{hc|/etc/locale.conf|2=
 +
LANG="zh_CN"
 +
export LANGUAGE="zh_CN:en_GB:en"
 +
}}
  
 
==设定每个用户的locale==
 
==设定每个用户的locale==

Revision as of 01:32, 8 May 2013

翻译状态: 本文是英文页面 Locale翻译,最后翻译时间:2013-05-07,点击这里可以查看翻译后英文页面的改动。

在linux上Locales用来定义用户所使用的语言。因为locales还定义了用户使用的字符集,所以,当语言中含有非ASCIIA字符时,设定好正确的locale就显得非常重要了。

Locales是用以下的格式来定义的:

<lang>_<territory>.<codeset>[@<modifiers>]

开启所需的locales

设置 locale 前,需要先准备需要的 locale。要列出所有启用的locale,使用:

$ locale -a

要开启 locale,在文件/etc/locale.gen中取消相应locale前的注释,此文件包含新系统支持的所有locale。加上注释就会禁用locale。开启需要的locale之后,你必须以root身份运行locale-gen来更新它们:

# locale-gen

想要显示正在使用的locale,运行:

$ locale
注意: 尽管在你的电脑上你很可能只使用一种语言,但同时开启其它的locale有时会有帮助、甚至是必要的。比如你正运行着一个多用户的系统,而有的用户并不懂en_US,那么你的系统需要支持他们需要的 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_*变量。

Note: /etc/locale.conf默认不存在,需要手动创建。
Tip: 如果安装是使用的locale正是你需要的,可以在 chroot 后通过 # locale > /etc/locale.conf进行设置。
/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 localectlman 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
小贴士: 如果你遇到一些问题想在论坛上,或者邮件列表中提问,请在张贴之前包含使用了export LC_MESSAGES=C的异常输出。这会把默认的输出信息改为英语,这样就可以让更多的人理解问题所在。在非英语的论坛张贴就没关系了。

疑难解答

我的终端不支持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 就会正常工作了。

更多资源