这个问题是通过提问而激发的
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-U
和GB2312
标点符号。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 系统上都存在两个语言环境名称:C
和POSIX
。这些名称是同义的并且意味着计算机术语,即适合于由计算机程序解析的数据的默认设置。
区域设置
以下语言环境类别定义为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_US
en_GB
- (可选)设置
LC_TIME
为您最喜欢的时间格式。
如上所述,避免设置LC_COLLATE
和LC_NUMERIC
。如果您使用LANG
,请通过将它们设置为 来显式覆盖这两个类别C
。