我使用的是Arch Linux,并且已按照Wiki上有关设置语言环境的说明进行操作。
几乎每个运行的程序都抱怨语言环境-甚至locale。看起来像这样:
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
要么:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")
有点令人困惑的是,其中/etc/locale.gen有几个示例。所有UTF-8行都有“ something.UTF-8”,并在运行时locale-gen显示正在运行的节目en_US.UTF-8... done,但是locale -a,这应该向您显示可用的语言环境显示en_US.utf8。我已经尝试了中/etc/locale-gen和LOCALE=中两种格式的各种组合/etc/rc.conf,但是没有任何方法可以解决问题。
附加信息:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
布鲁斯·埃迪格(Bruce Ediger)关于设置LANG=C并LC_ALL=en_US.UTF-8工作的建议(实际上,设置已LC_ALL解决,设置LANG无关紧要),但我想知道发生了什么。根据SUS,LC_ALL将覆盖所有其他LC_ *变量(如果已设置且不为null)。在我的系统中,它是设置的,但它为null,因此应将其忽略,而应使用其他值。这不是正在发生的事情,似乎应用程序正在setlocale使用进行调用LC_ALL,NULL返回并产生错误,即使其他调用setlocale返回了一个好的字符串也是如此。
这里是一个顶级ltrace的locale(向右滚动才能看到函数返回值)
% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510) = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "") = "en_US.UTF-8"
setlocale(5, "") = "en_US.UTF-8"
textdomain("libc") = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4) = 0
setlocale(6, "") = NULL
dcgettext(0, 0x405aa8, 5, 0, 0) = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)
.utf8在LOCALE和中使用LC_*,但显然.UTF-8在这里也可以使用...至于en-US:它是否出现在(没有.utf8)中locale -a?
export LANG=C,export LC_ALL=en_US.UTF-8看看会发生什么。我的Arch linux笔记本电脑LOCALE="en_US.UTF-8"位于/etc/rc.conf中,我不知道笔记本电脑在哪里设置LANG = C。
/etc/locale.conf吗?看起来您是不小心写了LANG=en-US(带连字符)而不是了LANG=en_US(带下划线)。
/etc/locale.gen将是有用的。
locale -a吗?