ubuntu 配置 locale(语言环境)

locale 是 Linux 系统中多语言环境的接口,每个 locale 都定义了地区、语言和字符集。locale 的语法规则是:<语言>_<地区>.<字符集编码><@修正值>,如 zh_CN.UTF-8 中,zh 表示中文,CN 表示中国大陆,UTF-8 表示字符集。

一、查看和安装可用的 locale(语言环境/字符集)

1. 查看可用的语言环境/字符集

locale -a 可以列出所有可用的语言环境/字符集,加 -v 选项可以输出更详细的信息。

$ locale -a 
bo_CN.utf8
C
C.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
...

这些 locale 在 ubuntu 系统中的默认存放位置为:/usr/share/i18n/locales。

可以筛选查看是否存在可用的中文语言环境:

$ locale -a | grep ^zh
zh_CN.utf8
zh_SG.utf8

2. 安装中文 locale(语言环境/字符集)

如果没有发现可用的中文语言环境,则需要安装中文语言包 language-pack-zh-hans

$ sudo apt install language-pack-zh-hans

3. 启用中文语言环境/字符集

通过修改 /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(语言环境/字符集)

操作系统根据区域不同以及人们对于计算机的输入习惯,将 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 对自身包含信息的概述

我们通过 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=

从输出结果发现,除了上面提到的 12 个 LC_* 以外,还有 3 个变量,分别是 LC_ALLLANGLANGUAGE

这里需要分别说明,其中的 2 个变量:LC_ALLLANG 与当前 locale 有关。而且,它们之间有一个优先级的关系:LC_ALL > LC_* > LANG

  • 当设置了 LC_ALL 的值,则 LC_*LANG 的值将会强制转换为 LC_ALL 的值
  • 当设置了 LANG 的值,如果 LC_* 有值,则 locale 采用该值(LC_* > LANG);而没有赋值的 LC_* ,则 locale 会采用 LANG 的值。
  • 如果 LC_ALLLANGLC_* 都不设置的话,系统将采用 POSIX 作为 lcoale,也就是 C locale。

至于另一个变量 LANGUAGE 则是用来指定应用程序的界面语言的。

三、设置当前的 locale

理解了上面的知识之后,我们就可以来设置当前的 locale 了。大概有下面几种设置 locale 的方法:

1.修改 /etc/profile 文件

/etc/profile 文件代码的最后添加定义环境变量的语句,然后执行 sudo source /etc/profile 后注销生效。如:

sudo vim /etc/profile
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh

这种方法比较可靠,因为这个环境变量的调用发生在系统启用的最后阶段。

2. 命令设置

$ sudo localectl set-locale LANG=zh_CN.UTF-8

这个命令其实就是对 LANG 变量以及未赋值的 LC_* 变量进行赋值。对于已经赋值的 LC_* 变量是不起作用的,当然可以单独对 LC_* 变量进行赋值,如:

$ sudo localectl set-locale LC_CTYPE=zh_CN.UTF-8

3. 修改 /etc/default/locale 文件

$sudo vim /etc/default/locale
LANG=zh_CN.UTF-8
LANGUAGE="zh_CN:zh"

如上,将 LANG=zh_CN.UTF-8LANGUAGE="zh_CN:zh" 写入该文件,注销或重启生效。

4. 创建 /etc/locale.conf 文件

/etc/locale.conf 文件的内容同上面/etc/default/locale 文件的内容一样,然后通过通过 source /etc/locale.conf 使其生效。

$sudo vim /etc/locale.conf
LANG=zh_CN.UTF-8
LANGUAGE="zh_CN:zh"

ps:根据第2、第3和第4种方法,在设置了变量值以后,在某些桌面环境会往往会无效,如 UKUI。这是因为 UKUI 在启动时会再次对 locale 进行设置。

你可能感兴趣的:(Linux学习,ubuntu,linux,locale,优麒麟)