# Locale (简体中文)

翻译状态： 本文是英文页面 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 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

小贴士: 如果你遇到一些问题想在论坛上，或者邮件列表中提问，请在张贴之前包含使用了`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 就会正常工作了。

## 更多资源

- Gentoo Linux Localization Guide
- Gentoo Wiki Archives: Locales
- ICU's interactive collation testing
- Free Standards Group Open Internationalisation Initiative

Category:

- Internationalization (简体中文)