Home Linux Locale
Post
Cancel

Linux Locale

Linux下的Locale详解讲的很好。

locale 按所涉及的文化传统各个方面可分为 12 个大类

1、语言符号及其分类 (LC_CTYPE) 2、数字 (LC_NUMERIC) 3、比较和排序习惯 (LC_COLLATE) 4、时间显示格式 (LC_TIME) 5、货币单位 (LC_MONETARY) 6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等 (LC_MESSAGES) 7、姓名书写方式 (LC_NAME) 8、地址书写方式 (LC_ADDRESS) 9、电话号码书写方式 (LC_TELEPHONE) 10、度量衡表达方式 (LC_MEASUREMENT) 11、默认纸张尺寸大小 (LC_PAPER) 12、对locale自身包含信息的概述 (LC_IDENTIFICATION)

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

1、假如设定了 LC_ALL=zh_CN.UTF-8,那么不管 LC 和 LANG 设定成什么值,它们都会被强制服从 LC_ALL 的设定,成为 zh_CN.UTF-8 2、假如设定了 LANG=zh_CN.UTF-8,而其他的 LC=en_US.UTF-8,并且没有设定 LC_ALL 的话,那么系统的 locale 设定为 LC=en_US.UTF-8 3、假如设定了 LANG=zh_CN.UTF-8,而其他的 LC,和 LC_ALL 均未设定的话,系统会将 LC 设定成默认值,也就是 LANG 的值 zh_CN.UTF-8 4、假如设定了 LANG=zh_CN.UTF-8,而 LC_CTYPE=en_US.UTF-8,其他的 LC 和 LC_ALL 均未设定的话,那么系统的 locale 设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC 均会采用默认值,也就是 LANG 的值

locale 应该这样设定

1、如果需要一个纯中文的系统的话,设定 LC_ALL= zh_CN.XXXX 或 LANG=zh_CN.XXXX 都可以 2、如果需要一个可以显示/输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,设定 LC_CTYPE=zh_CN.XXXX 和 LANG=en_US.XXXX 就可以 3、默认情况,也就是 LC_ALL,LANG 和 LC 均不指定特定值的话,系统将采用 POSIX 作为 lcoale,也就是 C locale。

另外 LANG 和 LANGUAGE 有什么区别呢?

LANG - Specifies the default locale for all unset locale variables LANGUAGE - Most programs use this for the language of its interface LANGUAGE 是设置应用程序的界面语言。

命令

查看当前系统语言环境,出现错误表示 locale 有缺失。

1
2
3
4
$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

查看系统内安装的 locale。

1
$ locale -a

安装 zh_CN.UTF-8

1
$ sudo locale-gen zh_CN.UTF-8

fish 设定 locale,编辑 ~/.config/fish/config.fish 文件。

1
set -gx LANG "zh_CN.utf-8"
This post is licensed under CC BY 4.0 by the author.