locale 是 Linux 系统中多语言环境的接口,每个 locale 都定义了地区、语言和字符集。除 C 和 POSIX 这两个 locale 名称外,locale 的命名规则是:<语言>_<地区>.<字符集编码><@修正值>,如 zh_CN.UTF-8 中,zh 表示中文,CN 表示中国大陆,UTF-8 表示字符集。
通常系统安装了 locale ,如没有安装,可以通过 sudo apt install locale 来安装。这些 locale 在 Debian & Ubuntu 系统中的默认存放目录为:/usr/share/i18n/locales/。
一、查看可用的语言环境
1. locale -a 可以列出所有可用的语言环境,加 -v 选项可以输出更详细的信息。
$ locale -a
C
C.utf8
POSIX
zh_CN.utf8这里的 C 和 POSIX 这两个 locale 是系统默认可用的语言环境,如果不设置任何语言环境的话,那可用及当前的语言环境就会默认是 C 和 POSIX
2. localectl list-locales 也可以查看系统可用语言环境
$ localectl list-locales 
C.UTF-8
zh_CN.UTF-83. 如果我们知道系统可用语言环境配置文件是位于 /etc/locale.gen 的话,还可以通过 cat 命令来直接查看:
$ cat /etc/locale.gen | grep -v "^$" | grep -v "#"
zh_CN.UTF-8 UTF-8二、配置可用的语言环境
通过修改 /etc/locale.gen 文件来配置可用的语言环境,将 #zh_CN.UTF-8 UTF-8 前面的注释去掉保存,并执行 sudo locale-gen 命令使之生效。
比如,我们通常启用的是中文、英文、藏文:
$ sudo vim /etc/locale.gen 
...
zh_CN.UTF-8 UTF-8
en_US.UTF-8 UTF-8
bo_CN.UTF-8 UTF-8
...
$ sudo locale-gen   # 生效三、查看系统使用的 locale(语言环境)
1. 通过 locale 命令(不加参数)可以查看系统的语言环境(字符集)的环境变量:
$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=看不懂?补习一下:操作系统根据区域不同以及人们对于计算机的输入习惯,将 locale(语言环境)归纳为 12 大类(帮助文件中常用范畴这个表述),并且分别赋予了 12 个环境变量,即12个 LC_*。
| 变量 | 含义 | 
|---|---|
| LC_CTYPE: | 语言符号及其分类 | 
| LC_NUMERIC: | 数字 | 
| LC_TIME: | 时间显示格式 | 
| LC_COLLATE: | 比较和排序习惯 | 
| LC_MONETARY: | 货币单位 | 
| LC_MESSAGES: | 信息,如提示信息、错误信息、状态信息、标题、标签、按钮和菜单等 | 
| LC_PAPER: | 默认纸张大小 | 
| LC_NAME: | 姓名书写方式 | 
| LC_ADDRESS: | 地址书写方式 | 
| LC_TELEPHONE: | 电话号码书写方式 | 
| LC_MEASUREMENT: | 度量衡表达方式 | 
| LC_IDENTIFICATION: | locale 对自身包含信息的概述 | 
但是,我们发现从输出结果发现,除了上面提到的 12 个 LC_* 环境变量以外,还有 3 个变量,分别是 LC_ALL、LANG 和 LANGUAGE。   
再补习一下:这里的 2 个变量:LC_ALL、LANG 与当前 locale 有关。而且,它们之间有一个优先级的关系:LC_ALL > LC_* > LANG。
- 当设置了 
LC_ALL的值,则LC_*和LANG的值将会强制转换为LC_ALL的值 - 当设置了 
LANG的值,如果LC_*有值,则 locale 采用该值(LC_*>LANG);而没有赋值的LC_*,则 locale 会采用LANG的值。 - 如果 
LC_ALL、LANG和LC_*都不设置的话,系统将采用 POSIX 作为 lcoale,也就是 C locale。 
至于另一个变量 LANGUAGE 则是用来指定应用程序的界面语言的。
locale 命令的其他用法
上面我们使用了 locale -a 和 locale 两个命令,输出了不同的信息,为了避免蒙圈,还是 --help 一下吧。
$ locale --help
用法: locale [选项...] 名称
  或: locale [选项...] [-a|-m]
给出区域特定的信息。
 系统信息:
   -a, --all-locales          写出可用区域的名称     # 也就是显示可用语言环境
   -m, --charmaps             写出可用字符映射的名称 # 语言环境中点(.)后面的就是字符映射了
 修改输出格式:
   -c, --category-name        写出选中范畴的名称      # 也就是那十二个以 LC_ 开头的大类 LC_*(不含 LC_ALL)
   -k, --keyword-name         写出选中关键字的名称    # 每个大类都有一些常用的显示格式,以键值对的形式出现
   -v, --verbose              打印更多信息
   -?, --help                 给出此帮助列表
       --usage                给出简要的用法信息
   -V, --version              打印程序版本号locale 命令的其他几个用法:
$ locale -k LC_TIME   # 查看 LC_TIME 这个大类的键值对,加上 -c 参数还可以显示选中范畴(或者说大类)的名称(这里是它本身 LC_TIME)
abday="日;一;二;三;四;五;六"
day="星期日;星期一;星期二;星期三;星期四;星期五;星期六"
abmon="1月;2月;3月;4月;5月;6月;7月;8月;9月;10月;11月;12月"
mon="一月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月"
am_pm="上午;下午"
d_t_fmt="%Y年%m月%d日 %A %H时%M分%S秒"
d_fmt="%Y年%m月%d日"
t_fmt="%H时%M分%S秒"
t_fmt_ampm="%p %I时%M分%S秒"
...(略)
$ locale -k day   # 查看关键字名 day 的 键值对,加上 -c 参数还可以显示选中范畴名称(LC_TIME),见下一条命令
day="星期日;星期一;星期二;星期三;星期四;星期五;星期六"
$ locale -kc day   # 查看关键字名 day 的 键值对及所在的范畴名(LC_TIME),因此,-kc 选项更加直观
LC_TIME
day="星期日;星期一;星期二;星期三;星期四;星期五;星期六"2. 通过 localectl status 可以查看系统 locale 的信息
$ localectl status
System Locale: LANG=zh_CN.UTF-8
               LANGUAGE=zh_CN:zh
    VC Keymap: (unset)            
   X11 Layout: cn
    X11 Model: pc105四、 设置系统的语言环境:
1. 修改配置文件
debian 等系统的语言环境配置文件为 /etc/default/locale ,而redhat 等系统的语言环境配置文件则为 /etc/locale.conf
以 debian 为例
$ sudo vim /etc/default/locale   # 此时配置文件已经修改了,但环境变量还没生效(可以通过 locale 命令查看),需要通过 source 命令刷新生效
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
$ source /etc/default/locale     # 刷新配置文件,使修改生效2. 通过命令来设置
可以通过 set-locale LOCALE... 或者 update-locale [OPTIONS] [LANG=locale] [LC_NUMERIC=locale] ... 来设置系统的语言环境
$ sudo localectl set-locale LANGUAGE=zh_CN:zh
$ source /etc/default/locale                       # 刷新配置文件,使修改生效或者
$ sudo update-locale LANGUAGE=zh_CN:zh   
$ source /etc/default/locale                       # 刷新配置文件,使修改生效3. 通过修改环境变量文件来设置
比如,在 /etc/profile 文件代码的最后添加定义环境变量的语句,然后执行 source /etc/profile 后生效。如:
$ sudo vim /etc/profile
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh            
暂无留言