J'utilise Arch Linux et j'ai suivi les instructions sur le wiki pour définir mes paramètres régionaux.
Presque tous les programmes qui s'exécutent se plaignent des paramètres régionaux - même locale
. Cela ressemble à ceci:
% 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=
ou:
% 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")
Quelque chose de légèrement déroutant est que le /etc/locale.gen
a plusieurs exemples; toutes les lignes UTF-8 ont "quelque chose.UTF-8", et exécutent des locale-gen
émissions en_US.UTF-8... done
pendant son exécution, mais locale -a
, qui est censé vous montrer les émissions locales disponibles en_US.utf8
. J'ai essayé différentes combinaisons des deux formats dans /etc/locale-gen
et LOCALE=
en /etc/rc.conf
, mais rien n'a résolu le problème.
Information additionnelle:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
La suggestion de Bruce Ediger de mettre en place LANG=C
et de LC_ALL=en_US.UTF-8
travailler (en fait, mettre en place LC_ALL
fixe, la mise en place LANG
n'a pas d'importance), mais j'aimerais savoir ce qui se passe. Selon SUS , LC_ALL remplacera toutes les autres variables LC_ * si elle est définie et non nulle. Dans mon système, il est défini, mais il est nul, il doit donc être ignoré et d'autres valeurs doivent être utilisées à la place. Ce n'est pas ce qui se passe, il semble que les applications appellent setlocale
avec LC_ALL
, obtiennent un NULL
retour et génèrent une erreur, même lorsque d'autres appels setlocale
retournent une bonne chaîne.
Voici le haut d'un ltrace
of locale
(faites défiler vers la droite pour voir les valeurs de retour des fonctions)
% 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
dans LOCALE
et LC_*
, mais cela .UTF-8
fonctionne apparemment ici aussi ... Quant à en-US: apparaît-il (sans .utf8
) dans locale -a
?
export LANG=C
et export LC_ALL=en_US.UTF-8
voyez ce qui se passe. Mon ordinateur portable Arch linux a LOCALE="en_US.UTF-8"
dans /etc/rc.conf, et je ne peux pas comprendre où mon ordinateur portable définit LANG = C.
/etc/locale.conf
? Il semble que vous ayez accidentellement écrit LANG=en-US
(avec trait d'union) au lieu de LANG=en_US
(avec trait de soulignement).
/etc/locale.gen
serait également utile.
locale -a
?