我使用的是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
吗?