Hei*_*nzi 14 environment-variables locale
我想要一个德语(奥地利)语言环境(A4 纸张大小,24 小时制,yyyy-mm-dd),但是一个英语用户界面(我不喜欢糟糕的翻译)。我认为实现这一点的正确方法是LC_
在我的.bashrc
(如果我错了,请纠正我)中如下设置变量:
LC_MESSAGES=en_US.UTF-8
LC_$everythingelse=de_AT.UTF-8
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方法来设置 LC_$everythingelse 而不是设置每个值?设置 LC_ALL 不是一个选项,因为它优先于 LC_MESSAGES:
$ export LC_ALL=de_AT.UTF_8
$ export LC_MESSAGES=en_US.UTF_8
$ echo $LC_MESSAGES
en_US.UTF_8
$ locale | grep LC_MESSAGES
LC_MESSAGES="de_AT.UTF_8"
Run Code Online (Sandbox Code Playgroud)
PS:这是一台共享机器,我不是 sudoer,所以更改系统范围的设置不是一种选择。
Gil*_*il' 16
共有三组区域设置¹:
LANG
,回退设置,如果您尚未为类别指定值。它旨在让用户以简单的方式指示他们的语言环境。LC_xxx
为每个类别(xxx
可以是MESSAGES
,TIME
等)。LC_ALL
覆盖所有设置。这是应用程序覆盖所有设置以便在已知语言环境(通常C
是默认语言环境)中工作的一种方式,通常是为了使各种命令以已知格式生成输出。因此,您可以设置LANG=de_AT.UTF-8
and LC_MESSAGES=C
(C
是默认语言环境,表示未翻译;en_US
通常与C
消息相同)。
但是,有两类我不建议更改默认值,因为它会破坏很多程序:
LC_COLLATE
是字符整理顺序。它不是很有用,因为它只指示如何对字符进行排序,而不是如何对字符串进行排序。知道如何对字符串进行排序的工具不使用LC_COLLATE
. 此外,很多工具都期望“[a-z]
匹配所有 26 个 ASCII 小写字母,而不匹配其他 ASCII 字符”,但在大多数非默认语言环境中情况并非如此(尝试echo B | LC_COLLATE=en_US grep '[a-z]'
)。LC_NUMERIC
指示如何显示数字。特别是,在许多语言中,它使浮点数使用 a,
而不是.
小数点。但是大多数解析数字的程序都期望 a.
并将 a,
视为字段分隔符。所以我建议
LC_COLLATE=C LC_NUMERIC=_C
,LANG
设置,只为有用的类别设置一个值(LC_MESSAGES
、LC_TIME
、LC_PAPER
、 加号LC_CTYPE
(其值可能因您的终端而异))。¹
加上LANGUAGE
GNU libc。如果你没有听说过它,你就不会错过太多。
Ric*_*rri 10
该手册页区域(7)说:
默认语言环境[...]使用以下步骤确定:
如果存在非空环境变量 LC_ALL,则使用 LC_ALL 的值。
如果与上述类别 [LC_*] 之一同名的环境变量存在且非空,则将其值用于该类别。
如果存在非空环境变量 LANG,则使用 LANG 的值。
因此,您可以使用 LANG 作为 LC_ALL 的一种低优先级模拟:将 LANG 的值设置为de_AT
LC_MESSAGES 为en_US
:
$ env LC_MESSAGES=en_US.UTF-8 LANG=de_AT.UTF-8 locale | egrep '(MESSAGES|PAPER)'
LC_MESSAGES=en_US.UTF-8
LC_PAPER="de_AT.UTF-8"
Run Code Online (Sandbox Code Playgroud)