J'utilise Arch Linux et j'ai suivi les instructions sur le wiki sur la définition de mes paramètres régionaux.
Presque tous les programmes qui fonctionnent se plaint de la locale - 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 déroutant légèrement est que le /etc/locale.gen
a plusieurs exemples; Toutes les lignes UTF-8 ont "quelque chose.utf-8" et fonctionnent locale-gen
spectacles en_US.UTF-8... done
tandis que ça marche, mais locale -a
, qui est censé vous montrer que les localités disponibles indique en_US.utf8
. J'ai essayé diverses combinaisons de formats dans /etc/locale-gen
et LOCALE=
dans /etc/rc.conf
, mais rien n'a corrigé le problème.
Information additionnelle:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Bruce Ediger's Suggestion de l'établissement LANG=C
et LC_ALL=en_US.UTF-8
a travaillé (en fait, réglage LC_ALL
réparé, régler LANG
n'a pas d'importance), mais j'aimerais savoir ce qui se passe. Selon [~ # ~] SUS [~ # ~ ~] , lc_all remplacera toutes les autres variables LC_ * s'il est défini et non null. Dans mon système, il est défini, mais il est null, il convient donc d'ignorer 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
, obtenir un NULL
arrière et générer une erreur, même lorsque d'autres appels à setlocale
renvoient une bonne chaîne.
Voici le sommet d'un ltrace
de locale
(faire défiler la droite pour voir les valeurs de retour de la fonction)
% 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)
J'ai eu le même problème après la mise en place /etc/locale.conf
Juste aujourd'hui (relatif aux récents changements à /etc/rc.conf
. Dans mon cas, il s'est avéré que les locaux n'étaient pas installés.
Vérifier /etc/locale.gen
. Tous les locaux que la référence de vos variables d'environnement doit être activée (c'est-à-dire non commentée) là-bas. Après avoir effectué vos modifications, courez Sudo locale-gen
Pour installer les paramètres locaux sélectionnés.
Après cela link résout mon problème:
Sudo localectl set-locale LANG=en_CA.UTF-8
# or change to en_US.UTF-8 depends on your locale-gen
il génère un fichier /etc/locale.conf
cela fixe ce problème
J'ai eu des problèmes similaires récemment, tous les noms de fichiers Unicode ont été affichés de manière incorrecte lorsque je supprimai accidentellement le "locale = EN_US.UTF8" dans /etc/rc.conf
. Alors j'ai vérifié le script de démarrage:
if [[ $DAEMON_LOCALE != [nN][oO] ]]; then
export LANG=${LOCALE:-C}
if [[ -r /etc/locale.conf ]]; then
parse_envfile /etc/locale.conf "${localevars[@]}"
fi
else
export LANG=C
fi
Une solution simple est chèque à la fois DAEMON_LOCALE
et LOCALE
dans /etc/rc.conf
, assurez-vous que le premier n'était pas no
et le second n'était pas vide.