基于 Debian 的系统中 LANG 和 LANGUAGE 环境变量

基于 Debian 的系统中 LANG 和 LANGUAGE 环境变量

似乎某些程序同时使用 LANG 和 LANGUAGE 环境变量来确定其用户界面语言。

这些变量的确切语义是什么?在哪里可以阅读有关它们的正确用法的信息?locale(1) 的手册页仅提到了 LC_* 系列环境变量。此外,还有一个常用的 LC_ALL 变量,但也没有在此处描述。

答案1

LANG包含所有未由LC_*变量直接设置的类别的设置。

LC_ALL用于覆盖每个LC_*LANGLANGUAGE。它不应该在普通用户环境中设置,但在编写依赖于国际化命令的精确输出的脚本时很有用。

LANGUAGE用于将消息语言(如LC_MESSAGES)设置为多值,例如,将其设置为fr:de:en将使用法语消息(如果存在);如果不存在,它将使用德语消息,如果德语或法语消息都不可用,它将恢复为英语。

答案2

看一下手册页locale(7):它描述了LANG后备设置,同时LC_ALL覆盖了所有单独的LC_*设置。

答案3

作为参考,语言环境系统是 GNU GetText,其完整文档可在 gettext-doc 包(Debian/Ubuntu)中找到。

另外,还有一本在线手册,其中有权威且详尽的文档 语言语言环境变量。

答案4

本回答尽量直接引用相关标准,不包含任何猜测或不准确的陈述。欢迎编辑和更正,只要引用相关标准和权威来源即可。

环境变量优先级

根据适用标准,所有四个变量LC_ALLLC_*LANG和的优先级为:LANGUAGE

  1. man 7 local

如果 setlocale(3) 的第二个参数是空字符串“”,则对于默认语言环境,使用以下步骤确定:

  1. 如果存在非空环境变量 LC_ALL,则使用 LC_ALL 的值。

  2. 如果存在与上述类别之一同名的环境变量且非空,则其值将用于该类别。

  3. 如果存在非空环境变量 LANG,则使用 LANG 的值。

  1. Gnu Gettext 手册

当程序查找与语言环境相关的值时,它会按照以下环境变量的优先级顺序进行查找:

  1. 语言
  2. LC_全部
  3. LC_xxx,根据所选的区域设置类别:LC_CTYPE、LC_NUMERIC、LC_TIME、LC_COLLATE、LC_MONETARY、LC_MESSAGES、...
  4. 语言

因此目前接受的答案是不准确的。

环境变量格式

从另一部分Gnu Gettext 手册

区域设置名称通常采用“ll_CC”格式。其中“ll”是 ISO 639 双字母语言代码,“CC”是 ISO 3166 双字母国家代码。

许多语言环境名称具有扩展语法“ll_CC.encoding”,它还指定字符编码。

一些语言环境名称使用“ll_CC@variant”而不是“ll_CC”。“@variant”可以表示语言 ll 和国家 CC 尚未暗示的任何类型的特征。

相关内容