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.gena plusieurs exemples; toutes les lignes UTF-8 ont "quelque chose.UTF-8", et exécutent des locale-genémissions en_US.UTF-8... donependant 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-genet 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=Cet de LC_ALL=en_US.UTF-8travailler (en fait, mettre en place LC_ALLfixe, la mise en place LANGn'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 setlocaleavec LC_ALL, obtiennent un NULLretour et génèrent une erreur, même lorsque d'autres appels setlocaleretournent une bonne chaîne.
Voici le haut d'un ltraceof 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)
.utf8dans LOCALEet LC_*, mais cela .UTF-8fonctionne apparemment ici aussi ... Quant à en-US: apparaît-il (sans .utf8) dans locale -a?
export LANG=Cet export LC_ALL=en_US.UTF-8voyez 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.genserait également utile.
locale -a?