Linux 上的 LC_* 区域设置字符串到底是什么意思?

Linux 上的 LC_* 区域设置字符串到底是什么意思?

当我在 Linux 命令提示符下输入

locale

我得到了一长串LC_*变量(例如LC_TIME等等)。变量的值类似于此列表中的值:

en_US.8859-1
de_DE@euro
fr_FR.utf-8

各个部分的具体含义是什么?

我知道 和@euro是相同的.8859-15,而且通常最后一部分是指实际的字符集(字节到实际符号的映射)。但是前两个代码到底“起什么作用”呢?它们会影响系统的哪些属性?例如(仅举几个例子),、en_US.8859-15和之间有什么区别?它们都具有完全相同的字符集,因此我在所选的编辑器中打开的所有文本文件看起来都一样。那么,如果我从一个“预字符集代码”切换到另一个“预字符集代码”(例如从 到),会发生什么情况?de_DE.8859-15de_CH.8859-15en_CU.8859-15de_CHen_US

是否有任何表格可以清晰、易读地列出这些差异?

答案1

这两部分构成ISO-639 语言代码。第一部分是语言本身,第二部分(通常)是国家代码指定哪个本地变体。

LANG您可以观察到几乎任何具有翻译的程序 更改的效果。LC_COLLATE影响程序的结果sort;影响和LC_DATE的输出。对于某些语言环境设置,可能(甚至很可能)您没有安装使用它们的任何程序。datels -l

在大多数系统上,仅LC_LANG设置了,所有其他设置都将恢复为从该设置继承。

(7)手册页中的以下引述与此locale相关:

LC_COLLATE
这用于更改函数 strcoll(3) 和 strxfrm(3) 的行为,这两个函数用于比较本地字母表中的字符串。例如,德语的尖锐 s 被排序为“ss”。
LC_CTYPE
这会改变字符处理和分类函数(例如 isupper(3) 和 toupper(3))以及多字节字符函数(例如 mblen(3) 或 wctomb(3))的行为。
LC_MONETARY
更改 localeconv(3) 返回的信息,该信息描述了数字的通常打印方式,并提供了诸如小数点与小数逗号之类的详细信息。此信息由函数 strfmon(3) 在内部使用。
LC_消息
更改显示的语言信息以及肯定或否定答案的样子。GNU C 库包含 gettext(3)、ngettext(3) 和 rpmatch(3) 函数,以简化这些信息的使用。如果类别设置为除“C”以外的有效语言环境,GNU gettext 系列函数还会遵循环境变量 LANGUAGE(包含以冒号分隔的语言环境列表)。
LC_NUMERIC
当建议使用区域设置时,更改 printf(3) 和 scanf(3) 系列函数所使用的信息。此信息也可以使用 localeconv(3) 函数读取。
LC_TIME
更改 strftime(3) 函数的行为,以本地可接受的形式显示当前时间;例如,欧洲大部分地区使用 24 小时制,而美国使用 12 小时制。
LC_全部上述所有的。

相关内容