Ich verwende Arch Linux und folge den Anweisungen im Wiki zum Festlegen meines Gebietsschemas.
Nahezu jedes Programm, das ausgeführt wird, beklagt sich über das Gebietsschema - sogar locale
. Es sieht aus wie das:
% 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=
oder:
% 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")
Etwas verwirrend ist, dass das /etc/locale.gen
mehrere Beispiele hat; Alle UTF-8-Zeilen haben "something.UTF-8" und laufen locale-gen
Shows, en_US.UTF-8... done
während es läuft, aber locale -a
das soll Ihnen die verfügbaren Locales-Shows zeigen en_US.utf8
. Ich habe verschiedene Kombinationen beider Formate in /etc/locale-gen
und LOCALE=
in ausprobiert /etc/rc.conf
, aber nichts hat das Problem behoben.
Zusätzliche Information:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Bruce Edigers Vorschlag, zu setzen LANG=C
und zu LC_ALL=en_US.UTF-8
arbeiten (in der Tat, das Setzen hat es LC_ALL
behoben, das Setzen LANG
war egal), aber ich würde gerne wissen, was passiert. Laut SUS überschreibt LC_ALL alle anderen LC_ * -Variablen, wenn es gesetzt und nicht null ist. In meinem System ist es festgelegt, aber es ist null, daher sollte es ignoriert werden und stattdessen sollten andere Werte verwendet werden. Das ist nicht , was passiert ist , scheint es , dass Anwendungen fordern setlocale
mit LC_ALL
einer immer NULL
wieder, und einen Fehler zu generieren, auch wenn andere Anrufe setlocale
eine gute String zurück.
Hier ist der Anfang eines ltrace
von locale
(scrollen Sie nach rechts, um Funktionsrückgabewerte zu sehen)
% 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
in LOCALE
und verwenden sollten LC_*
, aber anscheinend .UTF-8
funktioniert es auch hier ... Was en-US betrifft: Erscheint es (ohne .utf8
) in locale -a
?
export LANG=C
und export LC_ALL=en_US.UTF-8
und schau was passiert. Mein Arch Linux-Laptop hat LOCALE="en_US.UTF-8"
/etc/rc.conf und ich kann nicht herausfinden, wo mein Laptop LANG = C setzt.
/etc/locale.conf
? Es sieht so aus, als hätten Sie versehentlich LANG=en-US
(mit Bindestrich) statt LANG=en_US
(mit Unterstrich) geschrieben.
/etc/locale.gen
wäre auch nützlich.
locale -a
?