Comment résoudre mon problème de paramètres régionaux?

507

Je reçois ce message chaque fois que je fais quelque chose comme démarrer ou arrêter un service.

perl: warning: Setting locale failed.   
perl: warning: Please check that your locale settings:   
        LANGUAGE = "en_US:en",   
        LC_ALL = (unset),   
        LC_MESSAGES = "en_US.UTF-8",   
        LANG = "en_US.UTF-8"   
    are supported and installed on your system.   
perl: warning: Falling back to the standard locale ("C").   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   
(Reading database ... 21173 files and directories currently installed.)  
Removing bind9 ...  
 * Stopping domain name service... bind9                                        [ OK ]
Processing triggers for man-db ...   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   

Comment puis-je corriger cette erreur?

HackToHell
la source

Réponses:

514

Première exécution localepour répertorier les paramètres régionaux actuellement définis pour le compte d'utilisateur actuel:

$ locale
LANG=C
LANGUAGE=
LC_CTYPE=fi_FI.UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE=fi_FI.UTF-8
LC_MONETARY="C"
LC_MESSAGES=fi_FI.UTF-8
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

Générez ensuite les paramètres régionaux manquants et reconfigurez les paramètres régionaux pour en tenir compte:

$ sudo locale-gen "en_US.UTF-8"
Generating locales...
  en_US.UTF-8... done
Generation complete.

$ sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

Maintenant, vous ne verrez plus aucune erreur!

Otto Kekäläinen
la source
220
n'a pas fonctionné pour moi
Umair
4
Cela a fonctionné pour moi sur un certain nombre de systèmes. Existe-t-il un moyen d'éviter ce problème sur les systèmes nouvellement installés?
Brylie Christopher Oxley
13
@UmairAyub est peut-être que vous avez plus d'une langue inconnue, essayez ceci: pour y dans $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; done Il générera une locale pour chaque définition que vous avez
Ivan Buttinoni
3
La déconnexion et la connexion peuvent aider
SMMousavi
4
@Umair Le risque d'erreur humaine est élevé. Votre système est configuré en_GBpar défaut, mais vous le configurez en_US. Vous devez commenter manuellement en_GBet décommenter en_USdans /etc/locale.gen. Voir ma réponse à askubuntu.com/a/790373/25388 dans le matériel Raspberry Pi 3b et le système Raspbian Jessie.
Léo Léopold Hertz
366

Rien suggéré ci-dessus n'a fonctionné dans mon cas (Ubuntu Server 12.04LTS). Ce qui a finalement aidé a été de mettre au dossier /etc/environment:

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Pour une raison quelconque, il manquait. Les sorties pour les paramètres régionaux et d’autres commandes sont apparues comme si les variables étaient correctement définies. En d'autres termes, ne tenez pas pour acquis que tous les éléments de base sont déclarés là où ils doivent être déclarés.

Marcin
la source
115
Oui, aucun autre ne fonctionnait sauf celui-ci, peut-être en raison de la version mise à jour. Mais je préfère plutôt mettre cela dans /etc/default/locale.
Naveed
27
Mis à jour /etc/default/localeet pas plus d'avertissements. Merci
ohho
7
Oui, les autres n'ont pas fonctionné pour moi. Celui-ci l'a fait. Voici le one-liner que j'ai utilisé pour la mise à jour sans surveillance de ceci. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman
13
@ user163207 votre solution est incorrecte car elle ajoute (au lieu d'un écrasement), ce n'est pas le fichier recommandé et echodoit être exécutée avec l'interprétation des échappements de barre oblique inverse activée. C'est le même que le vôtre, mais avec les corrections susmentionnées:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
glarrain
13
N'OUBLIEZ PAS DE CONNEXION ET DE RE-CONNEXION!
SMMousavi
149

Ils devraient disparaître après avoir émis:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales 

dpkg-reconfigurereconfigure les paquets après qu'ils ont déjà été installés. Transmettez-lui les noms d’un ou de plusieurs paquets à reconfigurer. Il posera des questions sur la configuration, un peu comme lors de la première installation du paquet.

Rinzwind
la source
9
Je suis heureux que mes problèmes il y a un an vous aient aidé à résoudre ce problème;)
Rinzwind
1
Cette locale ne devrait-elle pas être générée par défaut? Je veux dire en, en_AU, en_CA, en_GBsont présents par défaut , mais pas en_US?
Daniel Serodio
@Rinzwind Merci beaucoup pour vos efforts! Je m'excuse; J'aurais dû mieux formuler ma question. Ce que je voulais dire, c'est: Pourquoi est-il nécessaire de reconfigurer le paquet de locales après avoir généré de nouvelles locales? Il me semble que les lieux fonctionnent même sans dpkg-reconfigure.
Victor
En utilisant Ubuntu 14.04, dans un conteneur Docker, rien n’était défini. Django a makemessagebesoin de ça. Cela a fonctionné parfaitement! Merci.
Justin
1
Je me rends compte que Raspbian est hors de portée ici, mais je pensais que je devais mentionner que je devais me déconnecter et que la connexion avant LC_ALLétait correctement définie.
MatrixManAtYrService
119

Ajoutez simplement ce qui suit à votre .bashrcfichier (en supposant que vous utilisez bash)

export LC_ALL="en_US.UTF-8"
ratz
la source
2
Cette solution miracle a fonctionné pour moi sur mon image Amazon-EC2 (exécutait leur AMI RHEL par défaut). Merci beaucoup! :)
gideon
Celui-ci a fonctionné pour moi avec l'image de mon digitalocean Ubuntu 12.04.
Inan
2
cela a résolu mon problème. Je dois poser une question: comment se fait-il que LC_ALL n’a pas été définie par la commande locale-gen comme d’autres réponses l’ont dit plus haut?
alexserver
Bizarre, toutes les solutions ci-dessus n'ont pas fonctionné pour moi mais celui-ci a fonctionné! Après avoir exporté, LC_ALLje pourrais enfin utiliser sudo dpkg-reconfigure locales.
Sobi3ch
enfin après avoir essayé beaucoup de figures, c’est celui qui m’appartient sur kubuntu 14.04.3 lts. Merci!
Jonah
94

Il s'agit d'un problème courant si vous vous connectez à distance. La solution consiste donc à ne pas transférer vos paramètres régionaux. Modifier /etc/ssh/ssh_configet commenter la SendEnv LANG LC_*ligne.

utilisateur249697
la source
6
J'essayais d'autres réponses, mais j'oubliais que je me connectais à distance jusqu'à ce que je voie votre réponse. Différents paramètres régionaux sur le serveur ssh et le client étaient à l'origine du problème.
Hieu
2
Sur OSX (connexion à Ubuntu) c'est à/etc/ssh_config
Michiel de Mare
Une ligne pour ce faire: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(utile pour le provisionnement de serveur)
Albin
Je ne pouvais pas définir LC_ALL sur la machine locale mais cela a résolu mon problème avec le serveur distant, merci.
Alexander Shlenchack
1
Il faut probablement noter que vous devez éditer le fichier sur la machine locale et non sur la télécommande.
Clashsoft
72

Il y a une commande pour ça:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

Il met /etc/default/localeà jour avec les valeurs fournies.

sgtpep
la source
4
Cela est légitime! N'oubliez pas de vous déconnecter / recharger votre shell, sinon vous ne verrez pas les changements. N'oubliez pas de consulter la réponse approuvée pour générer et reconfigurer des paramètres régionaux.
Erik Zivkovic
1
Courir localene montre toujours aucune valeur utf.
Cerin
@Cerin: Myybe, un appel à locale-genest manquant. Avant, il faut faire apt-get install locales.
Koppor
1
Cela ne changera pas LANG pour le shell root sur Ubuntu 16.04, car cela est annulé dans /root/.profile.
Willem
32

Ce qui a fonctionné pour moi le 12.10 était ceci:

apt-get install language-pack-en-base  

C'était après dpkg-reconfigure localesproduit aucun résultat.

George Answerology
la source
2
C'est la meilleure réponse. Ce n'est pas que mes paramètres régionaux ont été configurés de manière incorrecte, mais ils n'existaient pas réellement. Je pense que cela ressemble également au problème de l'OP ("Aucun fichier ni répertoire" est assez clair si vos paramètres régionaux sont définis correctement!).
Percée
1
J'obtenais le problème des OP chaque fois que j'utilisais apt-get sur Ubuntu 12.04. Cela le résolvait parfaitement sans avoir à éditer aucun fichier.
Deepend
"language-pack-en-base est déjà la version la plus récente."
Karlingen
La déconnexion et la connexion peuvent aider
SMMousavi
Travaillé pour moi dans un Ubuntu chrootsous Debian. Merci :)
Wyatt8740
18

N'oubliez pas de quitter votre session SSH (ou votre X11) en le quittant et en vous reconnectant. Toutes ces suggestions ne fonctionnaient pas pour moi à moins que je ne me reconnecte ....

Michael R. Hines
la source
2
Ce commentaire devrait avoir plus de votes positifs ou au moins le fait doit être souligné dans chaque réponse.
ni8mr
11

Pour Ubuntu 12.10, rien de ce qui précède n’a fonctionné à l’exception de la solution de ratzs. Je recommande de l'ajouter à votre fichier /etc/bash.bashrc:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"
Lovemore Nalube
la source
De toutes les solutions ci-dessus. C'est le seul qui a fonctionné pour moi.
JohnnyQ
11

J'étais coincé dans un état étrange où ma machine locale est configurée eset donc la machine distante (via vagrant) avait été provisionnée dans un état non traité. Par conséquent, je devais utiliser le manuel export=uniquement pour faciliter le succès dpkg-reconfigure. Ensuite, le système va bien.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales
Charney Kaye
la source
Meilleur! En raison de l' dpkg-recofigureaffichage mojibake.
Orient
9

J'ai écrit un script bash pour résoudre le problème ci-dessus. Les réponses ci-dessus sont utiles, mais définir les variables de paramètres régionaux en exportant simplement les valeurs dans une variable shell ne fonctionnera que pour une session. J'ai définitivement résolu ce problème en exportant les variables de paramètres régionaux dans le fichier .bash_profile. Vous pouvez également utiliser le /etc/profilefichier au lieu de .bash_profile.

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

N'oubliez pas sourcele .bash_profileet suivez le script dans une configuration facile.

Ajeet Khan
la source
8

Tu peux essayer:

export LANGUAGE=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_NUMERIC=ru_RU.UTF-8
export LC_TIME=ru_RU.UTF-8
export LC_COLLATE=ru_RU.UTF-8
export LC_MONETARY=ru_RU.UTF-8
export LC_MESSAGES=ru_RU.UTF-8
export LC_PAPER=ru_RU.UTF-8
export LC_NAME=ru_RU.UTF-8
export LC_ADDRESS=ru_RU.UTF-8
export LC_TELEPHONE=ru_RU.UTF-8
export LC_MEASUREMENT=ru_RU.UTF-8
export LC_IDENTIFICATION=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8

ru_RUest votre code de pays.

Koss
la source
7

La réponse acceptée actuelle n'est pas suffisante dans la stratégie de dépannage, car vous pouvez avoir une erreur humaine. Vous avez configuré votre système sur en_USmais vous avez en_GBactivé dans /etc/locale.gencomme ce que j'avais dans le fil ici pour Raspberry Pi 3b. Tous les paramètres régionaux utilisés doivent être activés dans /etc/locale.gen.

Je n'avais en_GB.UTF-8 UTF-8activé que dans /etc/locale.gen. Je n'aurais dû y être activé que en_US.UTF-8 UTF-8parce que d'autres commandes étaient exécutées. J'ai donc commenté GB et les États-Unis non commentés, et tout fonctionne maintenant

masi@raspberrypi:~ $ sudo vim /etc/locale.gen

masi@raspberrypi:~ $ sudo locale-gen 
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

masi@raspberrypi:~ $ sudo a2enmod rewrite && a2enmod headers && a2enmod ssl
Module rewrite already enabled
Module headers already enabled
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled

Maintenant, je ne reçois pas ces erreurs de locale avec des commandes.

Système: Raspbian Jessie
Matériel: Raspberry Pi 3b

Léo Léopold Hertz
la source
6

Comme indiqué ici dans le wiki Debian , vous pouvez modifier /etc/locale.genet ajouter tous les paramètres régionaux (ou les décommenter, j’avais une liste de tous les paramètres régionaux, à l’exception de celui que j’avais utilisé comme commentaires) pour laquelle vous souhaitez que votre système soit pris en charge. Ensuite, exécutez

sudo dpkg-reconfigure locales

mettre à jour les paramètres régionaux sur votre système. Désormais, tous les paramètres régionaux que vous avez ajoutés / non commentés /etc/locale.gensont disponibles sur votre système sans aucun avertissement.

msrd0
la source
3

Si vous utilisez l'environnement KDE, vérifiez le setlocale.shfichier dans ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en
MaximKostrikin
la source
cela m'a sauvé le cul .... merci! Incroyable de voir combien de lieux cette merde locale est configurée ... et comment dans le monde KDE réussit-il à tout foirer en mélangeant mes deux locales différentes (is_IS pour la localisation, l'argent, etc. et en_EN pour la langue en une non-existante is_EN lieu)! Grmpfh.
StFS
2
  1. Vous devrez peut-être sudo dpkg-reconfigureaussi exécuter l'application que vous avez installée alors que les paramètres régionaux ne sont pas valides / ne correspondent pas.

    Bien que les paramètres régionaux du système aient été configurés de manière incorrecte, j'ai installé vim. Plus tard, lorsque les paramètres régionaux du système ont été corrigés, j'ai constaté une situation qui vimaffichait incorrectement les caractères utf-8 sous forme de symboles étranges nanoet lessles affichait correctement. Fonctionnement

    sudo dpkg-reconfigure vim
    

    semblait résoudre le problème après la correction des paramètres système.

  2. J'ai également remarqué la même chose que ce qui a déjà été mentionné: vous devrez peut-être déconnecter / reconnecter SSH pour rendre les modifications visibles.

ajaaskel
la source
2

Ajouter le texte suivant ~/.profilefonctionne pour moi:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

J'utilise un serveur Ubuntu 16.04 LTS 64 bits sur Linode.

Jingguo Yao
la source
2

Cela a fonctionné pour moi quand j'ai eu le même problème (basé sur la solution fournie par dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
chasseur de python
la source
Je ne savais pas trop comment ajouter l'URL au commentaire. @EliahKagan
pythonhunter
1
Aucun problème - la date / l'horodatage à côté d'un commentaire est ce qui le lie directement. ... Ainsi, j'ai remarqué que le commentaire de glarrain (appeler au >lieu de >>) semblait être une réponse à celle de dman. Je ne sais pas vraiment quelle voie est la meilleure ou la meilleure, mais si vous avez un aperçu de cela, vous pouvez développer cette réponse avec davantage d'informations. (Vous n'êtes pas obligé de le faire.)
Eliah Kagan