Sto usando Arch Linux e ho seguito le indicazioni sul wiki sull'impostazione della mia locale.
Quasi tutti i programmi che eseguono si lamentano delle impostazioni locali, anche locale
. Sembra così:
% 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=
o:
% 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")
Qualcosa di leggermente confuso è che /etc/locale.gen
ha diversi esempi; tutte le linee UTF-8 hanno "qualcosa.UTF-8", e locale-gen
spettacoli in esecuzione en_US.UTF-8... done
mentre è in esecuzione, ma locale -a
, che dovrebbe mostrare gli spettacoli locali disponibili en_US.utf8
. Ho provato varie combinazioni di entrambi i formati in /etc/locale-gen
e LOCALE=
in /etc/rc.conf
, ma nulla ha risolto il problema.
Informazioni aggiuntive:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Il suggerimento di Bruce Ediger di ambientare LANG=C
e LC_ALL=en_US.UTF-8
lavorare (in effetti, ambientarlo LC_ALL
risolto, ambientare LANG
non aveva importanza), ma mi piacerebbe sapere cosa sta succedendo. Secondo SUS , LC_ALL sovrascriverà tutte le altre variabili LC_ * se è impostata e non è nulla. Nel mio sistema, è impostato, ma è nullo, quindi dovrebbe essere ignorato e dovrebbero essere usati altri valori. Non è quello che sta succedendo, sembra che le applicazioni stanno chiamando setlocale
con LC_ALL
, ottenendo uno NULL
schiena, e la generazione di un errore, anche quando altre chiamate a setlocale
restituire una stringa buona.
Ecco la parte superiore di un ltrace
di locale
(scorrere verso destra per vedere i valori di ritorno della funzione)
% 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
e LC_*
, ma a quanto pare .UTF-8
funziona anche qui ... Per quanto riguarda en-US: appare (senza .utf8
) in locale -a
?
export LANG=C
e export LC_ALL=en_US.UTF-8
vedi cosa succede. Il mio laptop Arch Linux ha LOCALE="en_US.UTF-8"
in /etc/rc.conf e non riesco a capire dove il mio laptop imposta LANG = C.
/etc/locale.conf
? Sembra che tu abbia scritto accidentalmente LANG=en-US
(con trattino) anziché LANG=en_US
(con trattino basso).
/etc/locale.gen
sarebbe utile.
locale -a
?