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

From ArchWiki
Jump to: navigation, search
(update translation)
(设定系统全局locale)
Line 39: Line 39:
  
 
==设定系统全局locale==
 
==设定系统全局locale==
To define the system-wide locale used on the system, set {{ic|LANG}} in {{ic|/etc/locale.conf}}.
+
要设置整个系统使用的 locale,在{{ic|/etc/locale.conf}}中设置{{ic|LANG}}变量。
  
要定义系统应使用哪一locale,你只要把它添加到{{ic|/etc/rc.conf}}文件中。
+
{{ic|locale.conf}}中可以设置一系列环境变量设置,每行一个。可以包含{{ic|LANG}}变量和{{ic|LC_ALL}}外的所有{{ic|LC_*}}变量。
LOCALE="en_US.UTF-8"
+
  
系统全局的locale将会在电脑重启以后更新。
+
{{Note|{{ic|/etc/locale.conf}}默认不存在,需要手动创建。}}
 +
 
 +
{{Tip|如果安装是使用的{{ic|locale}}正是你需要的,可以在 chroot 后通过{{ic| # locale > /etc/locale.conf}}进行设置。}}
 +
 
 +
{{hc|/etc/locale.conf|2=
 +
LANG="en_US.UTF-8"}}
 +
 
 +
高级示例:
 +
 
 +
{{hc|/etc/locale.conf|2=
 +
# 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"}}
 +
 
 +
也可以通过{{ic|localectl}}修改{{ic|locale.conf}},例如:
 +
 
 +
# localectl set-locale LANG="de_DE.utf8"
 +
 
 +
详情参阅 {{ic|man 1 localectl}} 和 {{ic|man 5 locale.conf}}。
  
 
==设定每个用户的locale==
 
==设定每个用户的locale==

Revision as of 01:22, 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

设定每个用户的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 就会正常工作了。

更多资源