我应该将我的语言环境设置为什么,这样做的含义是什么?


19

提出这个问题是因为Chromium浏览器不允许为“打印到文件”设置默认纸张尺寸,以及在聊天时与@Gilles进行交谈而激发了这个问题 。正如@don_crissti指出的那样,并由我证实,更改语言环境(至少是LC_PAPER)会影响所选纸张尺寸的差异。

我从来没有考虑过要选择什么,并且一直选择en_US.UTF-8它,因为这似乎是一个合理的默认选择。

但是,按照@Gilles聊天(请参阅从http://chat.stackexchange.com/transcript/message/17017095#17017095开始的对话)。提取物:

Gilles:LC_PAPER默认为$ LANG

吉尔斯:您必须具有LANG = en_US.UTF-8。那是个坏主意:它设置LC_COLLATE几乎总是一件坏事

Gilles:LC_COLLATE没有描述正确的排序规则,它的限制太严格(逐字符处理),请删除LANG并设置LC_CTYPE和LC_PAPER

吉尔:如果您想要用英语以外的其他语言发送消息,请加上LC_MESSAGES

显然,这里有一些我不知道的问题,并且我相信还有很多其他问题。因此,设置语言环境时应考虑哪些问题,以及如何设置它们?我一直只是dpkg-reconfigure locales在Debian中运行,对此没有三思。

具体问题:我应该将语言环境设置为en_IN.UTF-8吗?这样做有什么弊端吗?

另请参阅:LC_COLLATE是否(应)影响字符范围?

Answers:


29

语言环境设置是与您的文化有关的用户首选项。

区域名称

在我所知道的所有当前的unix变体上(但在一些古玩中却没有),语言环境名称遵循相同的模式:

  • 一个ISO 639-1小写的两字母语言代码,或ISO 639-2如果语言没有两字母代码三字母语言代码。例如,en对于英语,de对于德语,ja对于日语,uk对于乌克兰语,ber对于柏柏尔人,…
  • 对于许多语言(但不是全部),请在下划线_后面加上ISO 3166大写的两个字母的国家/地区代码。因此:en_US对于美国英语,en_UK对于英国英语,对于fr_CA加拿大(魁北克)法语,de_DE对于德国德语,de_AT对于奥地利德语,ja_JP对于日语(日本),等等。
  • 或者,一个点.后跟一个名称的字符编码,例如UTF-8ISO-8859-1KOI8-UGB2312Big5,等有了GNU libc中至少(我不知道如何广泛,这是),外壳和标点编码名称被忽略。例如,zh_CN.UTF-8是以UTF-8编码的普通话(简体)中文,zh_CN以GB2312编码的普通话是中文,以及zh_TW以Big5编码的台湾(繁体)中文。
  • (可选)在符号@后跟变体名称。变体的含义取决于语言环境。例如,许多欧洲国家/地区具有@euro语言符号为€且语言编码为包含此字符的语言环境的变体(ISO 8859-15或ISO 8859-16),而不是带有较旧货币符号的未经修饰的变体。例如,en_IE(英语,爱尔兰)使用latin1(ISO 8859-1)编码和£作为货币符号,而en_IE@euro使用latin9(ISO 8859-15)编码和€作为货币符号。

另外,在所有类unix的系统上都存在两个语言环境名称:CPOSIX。这些名称是同义词,是计算机的意思,即适合于由计算机程序解析的数据的默认设置。

区域设置

POSIX定义了以下语言环境类别:

  • LC_CTYPE:终端应用程序使用的字符集:分类数据(这些字符为字母,标点符号,空格,无效等)和大小写转换。文本实用程序通常会注意LC_CTYPE确定字符边界。
  • LC_COLLATE:排序(即排序)顺序。由于以下几个原因,此设置的用途非常有限:
    • 大多数语言都有复杂的规则,这些规则取决于要排序的内容(例如,词典单词和专有名称可能不使用相同的顺序),并且不能用表示LC_COLLATE
    • 很少有适当的排序顺序由使用语言环境设置的软件执行的应用程序。例如,文字处理器将文件的语言和编码存储在文件本身中(否则,在具有不同区域设置的系统上将无法正确处理文件),并且不必关心环境指定的区域设置。
    • LC_COLLATE可能会有讨厌的副作用,特别是因为它会导致排序顺序A <a <B <…,从而使“在A和Z之间”包含小写字母a到y。特别是,非常常见的正则表达式(例如)会[A-Z]破坏某些应用程序
  • LC_MESSAGES:信息性和错误消息的语言。
  • LC_NUMERIC:数字格式:十进制和千位分隔符。
    许多应用程序将硬编码.作为小数点分隔符。这变得LC_NUMERIC不是很有用,并且可能会带来危险:
    • 即使您进行了设置,您仍然会经常看到默认格式。
    • 您可能会遇到这样的情况:一个应用程序产生与语言环境相关的输出,而另一个应用程序期望.是小数点或,字段分隔符。
  • LC_MONETARY:类似于LC_NUMERIC,但以当地货币计。
    很少有应用程序使用此功能。
  • LC_TIME:日期和时间格式:工作日和月份名称,12或24小时制,日期部分的顺序,标点符号等。

在非嵌入式Linux上可以找到的GNU libc定义了其他语言环境类别:

  • LC_PAPER:默认纸张尺寸(由高度和宽度定义)。
  • LC_NAMELC_ADDRESSLC_TELEPHONELC_MEASUREMENTLC_IDENTIFICATION我不知道使用这些的任何应用程序。

环境变量

使用语言环境设置的应用程序根据环境变量确定它们。

  • 然后LANG使用环境变量的值,除非被另一个设置覆盖。如果LANG未设置,则默认语言环境为C
  • LC_xxx名称可以作为环境变量。
  • 如果LC_ALL设置为,则所有其他值都将被忽略;否则为0。这对于设置LC_ALL=C无论运行在何处都需要产生相同输出的运行应用程序很有用。
  • 另外,GNU libc 用于LANGUAGE定义后备LC_MESSAGES(例如LANGUAGE=fr_BE:fr_FR:en,首选比利时法语,或者如果不可用法国法语,或者如果不可用英语)。

安装语言环境

区域设置数据可能很大,因此某些发行版不会以可用的形式发布它们,而是需要额​​外的安装步骤。

  • 在Debian上,要安装语言环境,请运行dpkg-reconfigure locales并从对话框的列表中选择,或进行编辑/etc/locale.gen然后运行locale-gen
  • 在Ubuntu上,要安装语言环境,请以语言环境locale-gen的名称作为参数运行。

您可以定义自己的语言环境

建议

有用的设置是:

  • 设置LC_CTYPE为编码文本文件所使用的语言和编码。确保终端使用该编码。
    对于大多数语言,只有编码很重要。有一些例外。例如,一个大写的iI在大多数语言,但İ在土耳其(tr_TR)。
  • 设置LC_MESSAGES为您想要查看消息所用的语言。
  • 如果希望美国字母为默认纸张尺寸,则设置LC_PAPER为;en_US如果要A4 ,则设置为几乎其他任何值(例如en_GB)。
  • (可选)设置LC_TIME为您喜欢的时间格式。

如上所述,请避免设置LC_COLLATELC_NUMERIC。如果使用LANG,请将它们设置为显式覆盖这两个类别C


嗨,吉尔斯,谢谢您的详细回答。在哪里可以替代Debian上的默认设置?由于我需要A4纸张尺寸,因此我想我需要覆盖默认值LC_PAPER。我可以在不重启的情况下在整个系统上更新它吗?
Faheem Mitha 2014年

1
@FaheemMitha 设置环境变量的最好的发行版/与外壳无关的方法是什么?如果要在全系统范围内进行设置,请在Debian上进行/etc/default/locale。这些文件在您登录时生效;您可以export LC_PAPER=…在Shell中执行操作以影响从该Shell启动的命令。
吉尔斯(Gillles)“所以-别再作恶了”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.