Linux的locale, LC_ALL 和LANG

Linux的locale, LC_ALL 和LANG

什么是locale

locale 这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。locale 是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。
比如说:

在“简体中文”环境,运行date 命令,显示的是:
2015年01月07日 星期三 10:50:20 CST

而在英文环境下,运行date 命令,显示的是
Wed Jan  7 10:51:31 HKT 2015

locale 把按照所涉及到的使用习惯的各个方面分成12 大类,这12 个大类分别是:

  • 语言符号及其分类(LC_CTYPE)
  • 数字(LC_NUMBERIC)
  • 比较习惯(LC_COLLATE)
  • 时间显示格式(LC_TIME)
  • 货币单位(LC_MONETARY)
  • 信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES)
  • 行么书写方式(LC_NAME)
  • 地址书写方式(LC_ADDRESS)
  • 电话号码书写方式(LC_TELEPHONE)
  • 度量衡表达方式(LC_MEASUREMENT)
  • 默认纸张尺寸大小(LC_PAPER)
  • 对locale 自身包含信息的概述(LC_IDENTIFICATION)

而这些信息的配置通常放在/usr/share/i18n/locales 目录下。让我们打开以下zh_CN 和 en_US 。 实际上我们平时使用 date 函数的时候,就是在这里面进行格式选择的。

如何配置locale

通过locale 命令,可以看到LC_* 各个变量的设置,如下:

$ locale
LANG=en_HK.UTF-8
LANGUAGE=en_HK:en
LC_CTYPE="en_HK.UTF-8"
LC_NUMERIC="en_HK.UTF-8"
LC_TIME="en_HK.UTF-8"
LC_COLLATE="en_HK.UTF-8"
LC_MONETARY="en_HK.UTF-8"
LC_MESSAGES="en_HK.UTF-8"
LC_PAPER="en_HK.UTF-8"
LC_NAME="en_HK.UTF-8"
LC_ADDRESS="en_HK.UTF-8"
LC_TELEPHONE="en_HK.UTF-8"
LC_MEASUREMENT="en_HK.UTF-8"
LC_IDENTIFICATION="en_HK.UTF-8"
LC_ALL=

设置LC_TIME 变量:

$ LC_TIME=en_US.utf8  # 变量设置
$ export LC_TIME      # 生效设置
$ date                # 效果查看

LC_ALL、LANG和LC_* 的关系

设定locale 就是设定12 大类的locale分类属性,即12个LC_*。除了这个12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL 和LANG。他们之间有一个优先级的关系:LC_ALL > LC_* > LANG 可以这么说,LC_ALL 是最上级设定或者强制设定,而LANG 是默认设定值。

在设置了LC_ALL 之后,如果不 把LC_ALL 强制设置为空,那么LC_* 将无法被设置。但是LANG 的值不受影响。

LC_ALL=C 的含义

LC_ALL=C 是为了去除所有本地化的设置,让命令能正确执行。

locale 可以设置类型

$ locale -a
C
C.UTF-8
en_HK.utf8
POSIX

通过该命令查看后,可以知道所有可以使用的locale 方式。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页