![Linux 上的 LC_* 区域设置字符串到底是什么意思?](https://linux22.com/image/1453360/Linux%20%E4%B8%8A%E7%9A%84%20LC_*%20%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
当我在 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-15
de_CH.8859-15
en_CU.8859-15
de_CH
en_US
是否有任何表格可以清晰、易读地列出这些差异?
答案1
这两部分构成ISO-639 语言代码。第一部分是语言本身,第二部分(通常)是国家代码指定哪个本地变体。
LANG
您可以观察到几乎任何具有翻译的程序 更改的效果。LC_COLLATE
影响程序的结果sort
;影响和LC_DATE
的输出。对于某些语言环境设置,可能(甚至很可能)您没有安装使用它们的任何程序。date
ls -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_全部上述所有的。