Linux深入探索16-区域设置:locale

Linux深入探索16-区域设置:locale,第1张

----- 最近更新【2022-02-03】-----

本文目录结构预览:

在 Unix 初期,每个人都使用 ASCII 码,因此也没有什么问题。但是,ASCII 码基于英语,而随着 Unix、Linux 以及 Internet 在世界范围的扩展,有必要设计一种新系统,从而能够处理许多语言以及大量不同的文化习俗。

多年后,开发人员开发出了一种新系统,该系统基于 “区域设置(locale)” 的思想,这属于 POSIX 1003.2 标准。

区域设置是特定于语言和地域的规则和数据的集合,也可以看成是一组环境变量。区域设置包括有关排序规则、日期和时间格式设置、数字和货币约定,以及字符分类的信息。例如,如果 Linux 用户选择了美国英语区域设置,那么在 Linux 中,日期消息将以格式“月-日-年”显示,而货币符号将会使用“$”表示,等。

locale 命令是 Linux 系统中多语言环境的设置接口,用来设置或查看程序运行的不同语言环境。

除 C 和 POSIX 这两个 locale 名称外,locale 的命名规则为: language[_territory[.codeset]][@modifier] ,

即: 语言[_地区[.字符集编码]][@修饰] 。如: en_US.UTF-8

1、语法

locale - 查看区域设置信息。(get locale-specific information)

语法:

常用选项:

注: -c 与 -k 选项后面须带上某个环境变量参数或具体的键名才有意义。如, locale -k LC_CTYPE 。

2、常用案例

使用命令 locale 查看系统中所有区域设置的当前值。

使用命令 locale -a 查看系统支持哪些区域设置。

3、查看区域设置特定变量的值

1)如果 locale 命令后面加上 category 参数,将显示该 category 的所有值。如 locale LC_CTYPE

2)如果 locale 命令后面加上 keyword 参数,将显示该 keyword 对应的值。如 locale charmap

当查看某个具体参数的值时,为了让输出结果更有可读性,一般会加上 -kc 选项。

例:

例:查看有关存储时间和日期的格式。

1、update-locale

update-locale - 修改全局区域设置。(Modify global locale settings)

语法: update-locale [OPTIONS] [var=locale | var] [...]

例:将 LANG 设置为 C.UTF-8

设置完需要重启 shell 才能生效。

2、修改初始化配置文件

也可以通过修改初始化文件来修改区域设置,如修改用户的 .bashrc 文件或 .profile 文件。

如,在初始化文件中添加如下一行:

只是临时修改的话只在命令行执行该命令就行。

3、全局区域设置文件

如果是 Debian 类系统,可以在 /etc/default 中找到全局区域设置文件: /etc/default/locale 。

update-locale 命令修改的就是这个文件的内容。

如果是 Red Hat 类系统,则该文件位于: /etc/locale.conf 。

说明:

优先级: LANG <LC_* <LC_ALL ,优先级比 LANG 高,LC_ALL 优先级最高。

LC_ALL 优先级最高,若设置了此变量,所有 LC_* 和 LANG 都会强制跟随它的值,所以一般不用。 LC_ALL 实际相当于一次设置全部的 LC_* 。

一般我们使用 LANG 来设置全部的 LC_*,而独立设置一个 LC_* 为想要的设置。比如,我设置 LANG=en_US.UTF-8 ,设置 LC_TIME=zh_GN.UTF-8 ,目的是为了输出中文形式的时间。如下:

区域设置可以分为很多个类别(category),也就是多个环境变量。下表将列出一些常用的类别:

使用命 locale 可心展开查看每个 category 的具体键值对:

或者查看某个具体的值:

C 区域设置使用 ASCII 排序序列,在这种排序序列中,大写字母位于小写字母之前:ABC...XYZabc...z。该模式称为 C 排序序列

en_US 区域设置使用一种不同的排序序列,在排序序列中,小写字母和大写字母成对分组:aAbBcC...zZ。这种模式比较自然,因为它以字典顺序组织单词和字符。所以这一模式称为 字典排序序列

排列顺序比较:

例:C 排序序列

例:字典排序序列

1.一般情况

 查看当前locale设置:

locale

登录后复制

查看系统目前可用的locale配置:

locale -a

登录后复制

如果某种locale不在上述列表中出现,可以使用locale-gen命令来安装该种locale。

locale-gen zh_CN.UTF-8

登录后复制

上述命令会安装 zh_CN.UTF-8。

修改当前locale配置:

可以直接编辑/etc/default/locale文件,也可以使用如下命令来修改该文件:

update-locale LANG=zh_CN.UTF-8

登录后复制

修改完使用locale查看不一定会立即生效

但是/etc/default/locale文件内参数已修改

使用source /etc/default/locale 立即生效

在终端输入 locale 命令,可以得到以下内容:(变量的值根据用户不同的设定而有所不同)

这个变量会填充所有未设置的 LC_* 变量的值.

使用 gettext 翻译的软件会按照 LANGUAGE 选择使用的语言。用户通过这个变量指定一个 locale 列表 ,如果前面的 locale 缺少翻译,会自动使用后面的 locale 显示界面。 例如下面的例子使用简体中文,没有翻译时使用英文:

   locale.conf :

此类别确定字节序列作为字符的解释(例如,单字节字符与多字节字符)、字符分类(例如,字母或数字)和字符类的行为。

此类别确定用于非货币数值的格式规则,例如千位分隔符和基数字符(在大多数英语国家是句点,但在许多其他地区是逗号)

修改 strftime() 函数的执行方式以显示适于当地格式的当前时间例如,欧洲的绝大部分地区使用的是 24 小时的时钟, 而美国则是 12 小时的时钟.

如果LC_ALL被设置,那么所有的变量都将设置成和LC_ALL一致

详情请见 locale(7)

参考:

Linux下的Locale详解

Arch Wiki

man-pages locale(7)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7903805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存