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.genmehrere Beispiele hat; Alle UTF-8-Zeilen haben "something.UTF-8" und laufen locale-genShows, en_US.UTF-8... donewährend es läuft, aber locale -adas soll Ihnen die verfügbaren Locales-Shows zeigen en_US.utf8. Ich habe verschiedene Kombinationen beider Formate in /etc/locale-genund 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=Cund zu LC_ALL=en_US.UTF-8arbeiten (in der Tat, das Setzen hat es LC_ALLbehoben, das Setzen LANGwar 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 setlocalemit LC_ALLeiner immer NULLwieder, und einen Fehler zu generieren, auch wenn andere Anrufe setlocaleeine gute String zurück.
Hier ist der Anfang eines ltracevon 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)
.utf8in LOCALEund verwenden sollten LC_*, aber anscheinend .UTF-8funktioniert es auch hier ... Was en-US betrifft: Erscheint es (ohne .utf8) in locale -a?
export LANG=Cund export LC_ALL=en_US.UTF-8und 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.genwäre auch nützlich.
locale -a?