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)
la source
locale -a
?.utf8
dansLOCALE
etLC_*
, mais cela.UTF-8
fonctionne apparemment ici aussi ... Quant à en-US: apparaît-il (sans.utf8
) danslocale -a
?export LANG=C
etexport LC_ALL=en_US.UTF-8
voyez ce qui se passe. Mon ordinateur portable Arch linux aLOCALE="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 écritLANG=en-US
(avec trait d'union) au lieu deLANG=en_US
(avec trait de soulignement)./etc/locale.gen
serait également utile.Réponses:
Il vous manque un fichier qui serait utilisé pour définir les paramètres régionaux par défaut en l'absence de
$LANG
ou$LC_ALL
(ou tous les plus spécifiques$LC_whatever
) en cours de définition.Sur les anciennes glibc, c'est / usr / lib / locale / locale-archive. Parce que GNU / Linux est chaotique, vous devez utiliser strace pour déterminer quels fichiers sont attendus dans les versions particulières utilisées sur votre machine:
---------------------- Commentaires ajoutés 1 jour plus tard:
"ltrace -S" devrait être correct, car il affiche les appels système.
Sinon, "ltrace" n'est pas très utile (c'est-à-dire qu'il est contre-productif contre strace), car il ne montre que les appels les plus élevés. Celles-ci sont évidentes (setlocale (3)), alors que le vrai problème se produit dans libc.
Il semble que vous avez les premières données locales installées, depuis en_US.UTF-8 œuvres.
Si oui, alors quelque chose comme ça devrait résoudre votre problème, en définissant une valeur par défaut à l'échelle du système:
la source
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
fonctionne sur Raspbian 2018-11-13 Lite.J'ai eu le même problème après la configuration d'
/etc/locale.conf
aujourd'hui (concernant les récentes modifications apportées à/etc/rc.conf
. Dans mon cas, il s'est avéré que les paramètres régionaux n'étaient pas installés.Vérifiez
/etc/locale.gen
. Tous les paramètres régionaux auxquels vos variables d'environnement font référence doivent être activés (c'est-à-dire non commentés). Après avoir apporté vos modifications, exécutezsudo locale-gen
pour installer les paramètres régionaux sélectionnés.la source
Suivre ce lien résout mon problème:
il génère un fichier
/etc/locale.conf
qui résout ce problèmela source
J'ai eu des problèmes similaires récemment, tous les noms de fichiers Unicode n'étaient pas affichés correctement, quand j'ai accidentellement supprimé le 'LOCALE = en_US.utf8' dans
/etc/rc.conf
. J'ai donc vérifié le script de démarrage:La solution simple consiste à archiver
DAEMON_LOCALE
etLOCALE
à vérifier/etc/rc.conf
, assurez-vous que le premier ne l'était pasno
et que le second n'était pas vide.la source
Peut-être que l'un de vos paramètres n'est pas valide? Ce sont mes paramètres régionaux pour référence; ils ne provoquent aucune erreur (KUbuntu 12.04):
la source