我应该将区域设置设置为什么?这样做会产生什么影响?

我应该将区域设置设置为什么?这样做会产生什么影响?

这个问题是通过提问而激发的 Chromium 浏览器不允许设置“打印到文件”的默认纸张尺寸,以及通过聊天与 @Gilles 进行对话。正如@don_crissti 所指出的,并且经我验证,更改区域设置(至少LC_PAPER)会对选择的纸张尺寸产生影响。

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

然而,根据@Gilles 的聊天记录(参见对话开始于http://chat.stackexchange.com/transcript/message/17017095#17017095)。摘录:

Gilles:LC_PAPER 默认为 $LANG

Gilles:您必须有 LANG=en_US.UTF-8。这是一个坏主意:它设置了 LC_COLLATE 这几乎总是一件坏事

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

Gilles:如果您想要英语以外的语言的消息,请加上 LC_MESSAGES

显然,这里有些问题我不知道,我相信还有很多其他人也不知道。那么,设置区域设置时应该考虑哪些问题,以及如何设置它们?我一直都dpkg-reconfigure locales在 Debian 中运行,没有多想。

具体问题:我应该将区域设置设置为 en_IN.UTF-8 吗?这样做有什么缺点吗?

也可以看看:LC_COLLATE 是否(应该)影响字符范围?

答案1

语言环境设置是与您的文化相关的用户偏好。

语言环境名称

在我所知道的所有当前 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-8至少在GNU libc 中(ISO-8859-1我不知道这种情况有多普遍),在编码名称时会忽略大小写KOI8-UGB2312标点符号。Big5例如,zh_CN.UTF-8普通话(简体)中文是用 UTF-8 编码的,zh_CN普通话是用 GB2312 编码的,zh_TW台语(繁体)中文是用 Big5 编码的。
  • (可选)at 符号@后跟变体的名称。变体的含义取决于区域设置。例如,许多欧洲国家/地区都有一种@euro语言环境变体,其中货币符号为 €,并且编码是包含该字符的编码(ISO 8859-15 或 ISO 8859-16),而不是带有旧货币符号的朴素变体。例如,en_IE(English, Ireland) 使用 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_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: 我不知道有任何应用程序使用这些。

环境变量

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

  • LANG然后使用环境变量的值,除非被其他设置覆盖。如果LANG未设置,则默认区域设置为C
  • 这些LC_xxx名称可以用作环境变量。
  • 如果LC_ALL设置了,则忽略所有其他值;这主要用于设置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为您对文本文件进行编码的语言和编码。确保您的终端使用该编码。
    对于大多数语言来说,只有编码很重要。但也有一些例外;例如,大多数语言中i都是大写字母,但土耳其语 ( ) 除外。Iİtr_TR
  • 设置LC_MESSAGES为您希望查看消息时使用的语言。
  • 如果您希望 US Letter 作为默认纸张尺寸,则设置LC_PAPER为;如果您希望 A4,则设置为其他任何尺寸(例如 )。en_USen_GB
  • (可选)设置LC_TIME为您最喜欢的时间格式。

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

相关内容