Comment réparer un avertissement de paramètre de paramètres régionaux à partir de Perl?

596

Quand je cours perl, je reçois l'avertissement:

perl: avertissement: échec de la définition des paramètres régionaux.
perl: avertissement: veuillez vérifier que vos paramètres régionaux:
    LANGUAGE = (non défini),
    LC_ALL = (non défini),
    LANG = "en_US.UTF-8"
sont pris en charge et installés sur votre système.
perl: avertissement: retour aux paramètres régionaux standard ("C").

Comment je le répare?

xain
la source
Que s'est-il passé lorsque vous avez vérifié les paramètres régionaux, comme le message d'erreur vous l'a dit?
brian d foy
3
au lieu d'installer les paramètres régionaux, vous pouvez également modifier les paramètres régionaux. Sur ma boîte Ubuntu, cela se fait pour un utilisateur en modifiant~/.pam_environment
Janus Troelsen
Sur mon ODROID-C1 exécutant Ubuntu, le problème était en effet le fichier ~ / .pam_environment. Certaines des variables étaient es_US.UTF-8 au lieu de en_US.UTF-8. Je vous remercie.
f1vefour
J'ai obtenu ceci sur Cygwin \ Babun. Seule une réinstallation de perl l'a corrigé.
Lucas Soares

Réponses:

449

Votre système d'exploitation n'est pas au courant en_US.UTF-8.

Vous n'avez pas mentionné de plateforme spécifique, mais je peux reproduire votre problème:

% uname -a
OSF1 hunter2 V5.1 2650 alpha
% perl -e exit
perl: avertissement: échec de la définition des paramètres régionaux.
perl: avertissement: veuillez vérifier que vos paramètres régionaux:
    LC_ALL = (non défini),
    LANG = "en_US.UTF-8"
    sont pris en charge et installés sur votre système.
perl: avertissement: retour aux paramètres régionaux standard ("C").

Je suppose que vous avez utilisé ssh pour vous connecter à cet ancien hôte à partir d'une machine de bureau plus récente. Il est courant /etc/ssh/sshd_configde contenir

AcceptEnv LANG LC_*

qui permet aux clients de propager les valeurs de ces variables d'environnement dans de nouvelles sessions.

L'avertissement vous donne un indice sur la façon de le supprimer si vous n'avez pas besoin des paramètres régionaux complets:

% env LANG = C perl -e exit
%

ou avec bash:

$ LANG = C sortie perl -e
$ 

Pour une correction permanente, choisissez l'un des

  1. Sur l'ancien hôte, définissez la LANGvariable d'environnement dans le fichier d'initialisation de votre shell.
  2. Modifiez votre environnement côté client, par exemple , plutôt que d' ssh hunter2utiliser la commande LANG=C ssh hunter2.
  3. Si vous avez des droits d'administrateur, arrêtez ssh d'envoyer les variables d'environnement en commentant la SendEnv LANG LC_*ligne dans le local /etc/ssh/ssh_config fichier . (Merci à cette réponse . Voir le bogue 1285 pour OpenSSH pour en savoir plus.)
Greg Bacon
la source
22
Merci! J'ai eu ce message d'erreur lors de la connexion avec git à mon serveur. Après l'ajout de de_CH.UTF-8 (n'était pas pris en charge mais utilisé localement) avec dpkg-reconfigure localesle message a disparu.
Simon A. Eugster
82
J'avais ce problème depuis des lustres, ... la suppression de "AcceptEnv LANG LC_ *" de sshd_config l'a finalement résolu. Merci pour l'astuce!
madc
2
@Greg Bacon, n'y aurait-il pas aussi des cas où vous voudriez définir les variables d'environnement à l'échelle du système, par exemple en créant un fichier / etc / environment? help.ubuntu.com/community/…
fraxture
25
@HermannIngjaldsson, au moins sur Ubuntu (12.10), il n'était pas nécessaire de redémarrer le serveur (après avoir supprimé "AcceptEnv LANG LC_ *"). Je viens de recharger ssh config:, service ssh reloadce qui prend une fraction de seconde et ne provoque même pas la fin de la session ssh en cours.
noamtm
3
ajoutez «export LC_ALL = C» puis «source ~ / .bashrc» au système client pour résoudre le problème.
EffectiveMatrix
476

Voici comment le résoudre sur Mac OS Lion (10.7) ou Cygwin (Windows 10):

Ajoutez les lignes suivantes à votre bashrc ou bash_profile sur la machine hôte:

# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Si vous utilisez zsh, modifiez zshrc:

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8
Allen Bargi
la source
6
Merci, j'ai longtemps cherché une solution à ce problème, et j'ai toujours pensé que c'était un problème dans la configuration de mon serveur Ubuntu, et il semblait qu'il n'y avait pas de solution qui a aidé (tout ce truc de reconstitution de dkpg (
Teemu Kurppa
5
Parce que LC_ALLremplace toutes les autres variables, je préfère définir LANG=de_AT.UTF-8et les variables individuelles comme LC_MESSAGES=en_US.UTF-8. Si une variable n'est pas définie, elle revient à LANG. Vous pouvez également par exemple. unset LC_CTYPEpour le forcer à retomber LANG.
David
4
Placer ces lignes dans .bashrc n'a pas fonctionné, mais bash_profile l'a résolu! J'ai dû créer le fichier.
Hermann Ingjaldsson
5
Mettre ces lignes en ~/.bashrcrésolu pour moi ... puis doit recharger en utilisant source ~/.bashrc... Thnks <3
Enissay
5
Merci, cela a bien fonctionné sur ZSH et le plugin oh-my-zsh sous Mac OS X El Capitan, au bas de ~ / .zshrc: LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni
207

Si vous créez un rootfs à l'aide de debootstrap, vous devrez générer les paramètres régionaux. Vous pouvez le faire en exécutant:

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

Cette astuce provient de https://help.ubuntu.com/community/Xen

Marc
la source
28
C'est la vraie solution pour moi.
Afriza N. Arief,
6
locale-gen ne prend aucun argument (dans Debian stable au moins). Au lieu de cela, modifiez /etc/locale.gen pour décommenter les paramètres régionaux que vous souhaitez, puis exécutez sudo locale-gen
Sam Watkins
2
fixé surUbuntu Server
Paschalis
5
Sur Debian, vous devrez peut-être le faire en $ echo en_US UTF-8 >> /etc/locale.genpremier.
akhmed
1
Sur Gentoo (au moins), locale-genne prend pas d'arguments. Il lit à partir de /etc/locale.gen.
Pistos
142

Utilisation:

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

Cela fonctionne pour Debian . Je ne sais pas pourquoi - mais locale-gen n'a eu aucun résultat.

Important! C'est une solution temporaire. Il doit être exécuté pour chaque session.

artemn
la source
13
Celui-ci a fonctionné pour moi. Je viens de le mettre dans mon .bashrcdossier.
Anirudh Ramanathan
2
A aussi fonctionné pour moi. Je n'ai eu qu'à définir les deux paramètres (LANGUAGE et LC_ALL) qui n'apparaissaient pas dans les avertissements Perl
laurent
2
Sur Debian, local-genne traite que les locales qui ne sont pas commentées /etc/local.gen. Vous devrez peut-être le faire en echo en_US UTF-8 >> /etc/locale.genpremier.
akhmed
cela a fonctionné pour moi sur Elementary OS Freaya (basé sur Ubuntu)
valkirilov
1
LC_ C TYPE peut être?
mixel
139

Cela signifie généralement que vous n'avez pas correctement configuré les paramètres régionaux sur votre machine Linux.

Sur Debian ou Ubuntu, cela signifie que vous devez faire

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

Voir aussi man locale-gen .

Paul Tomblin
la source
30
ne résout pas le problème ici
Somatik
6
dpkg-reconfigure locales - correction du problème pour moi, debian 7.1
newUserNameHere
4
dpkg-reconfigure locales échoue lui-même avec les mêmes messages d'erreur de locale que perl que l'on essaie de corriger en premier lieu !!!!
matteo
10
Cela a fonctionné pour moi dans Ubuntu 14.04, bien que je devais d'abord ajouter les paramètres régionaux manquants avecsudo locale-gen es_UY.UTF-8
alf
2
@matteo Seulement la première fois, avant qu'il ne corrige l'erreur. Réessayez et cela devrait être corrigé.
Zero3
92

Pour les utilisateurs de macOS et Mac OS X uniquement

J'obtenais le même avertissement lors de l'utilisation de Git

Pour résoudre cet avertissement Décochez l' Set locale environment variable on startupoption et redémarrez votre terminal. La capture d'écran ci-dessous représente mes paramètres de terminal.

entrez la description de l'image ici

Inder Kumar Rathore
la source
3
Wow, si simple et résolu mes problèmes! Merci!
Michal
3
J'ai essayé tous les autres mais celui-ci l'a fait pour moi. J'utilise iTerm et il a la même option d'encodage de caractères.
Michael Morrison
2
Malheureusement, cela casse ZSH (tabulation a cessé de fonctionner)
Christian
1
Cela fait totalement l'affaire pour Mac OS. Soit dit en passant, ce début m'est arrivé juste après la mise à niveau vers macOS Sierra. Et cela a résolu ce problème pour moi.
Paulo Malvar
1
cela a résolu mon problème. cela a commencé à m'arriver, après la mise à jour vers Mac OS X High Sierra depuis Sierra.
Lucian Irimie
36

C'est une solution simple dans Ubuntu. Vous devez générer les paramètres régionaux à partir de zéro, en exécutant les commandes suivantes à partir de la ligne de commande:

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

Cela devrait créer les paramètres régionaux, puis les reconfigurer.

jfreak53
la source
Cela a bien fonctionné pour moi même en utilisant pt_BR pt_BR.UTF-8- Merci.
Marcos Freitas
29

L'ajout de ce qui suit pour /etc/environmentrésoudre le problème pour moi sur Debian et Ubuntu (bien sûr, modifiez pour correspondre aux paramètres régionaux que vous souhaitez utiliser):

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
joscarsson
la source
7
.. J'ai reçu un avertissement disant que la définition de locale dans /etc/environmentest obsolète et devrait plutôt être définie dans /etc/default/locale. Les deux semblent fonctionner pour l'instant.
joscarsson
devrait êtreLC_CTYPE
aexl
25

J'utilise maintenant ceci:

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Déconnectez-vous ensuite de la session SSH et reconnectez-vous.

Ancienne réponse:

Seulement cela m'a aidé:

$ locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LC_ALL=

$ sudo su

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

# locale-gen en_US.UTF-8
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

# exit

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
warvariuc
la source
Cela a bien fonctionné pour moi sur Ubuntu 15.04, merci beaucoup.
Goke Obasa
22

sur Debian après de nombreuses recherches, cela a fait l'affaire.

première:

sudo apt-get purge locales

puis:

sudo aptitude install locales

et le fameux:

sudo dpkg-reconfigure locales

Cela débarrasse le système des paramètres régionaux, puis réinstalle les paramètres régionaux et rétrograde libc6 de 2.19 à 2.13, ce qui est le problème. Configure ensuite à nouveau les paramètres régionaux.

tkjef
la source
4
dpkg-reconfigure localesc'est tout ce qu'il faut. sudosi vous êtes un type sudo, ou faites-le en tant que root. Sélectionnez ensuite vos paramètres régionaux en fonction de ce que vous avez dans votre environnement shell.
mknaf
6
dpkg-reconfigure locales DEVRAIT être tout ce qui est nécessaire. Après avoir essayé 100 fois et regardé autour d'Internet et c'est tout ce que vous avez vu et le problème ne se résoudra pas, essayez ce qui précède. Revenez ensuite et votez pour cela. :)
tkjef
1
enfin une réponse non piratée à ce problème, devrait certainement être acceptée!
php_nub_qq
17

Ceci est une réponse rapide. Nous définirons des paramètres régionaux qui ne seront pas effacés après le redémarrage. Ouvrez d'abord le fichier bash et modifiez-le:

nano .bashrc

ajoutez ces lignes au fichier:

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

activer le changement en rechargeant bash:

source ~/.bashrc

résultats de test :

locale
Alouani Younes
la source
Le seul qui fonctionne pour moi, le serveur Raspbian et Ubuntu 16.04 :)
Liso
13

Pour Ubuntu, utilisez ceci,

#export LANGUAGE=en_US.UTF-8
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#export LC_TYPE=en_US.UTF-8

A travaillé pour moi.

Amjith
la source
Cela a également fonctionné pour moi, en supprimant tout le contenu du fichier /etc/default/localeet en ne mettant que la définition des vars (en supprimant l'exportation de mots) et en redémarrant le serveur
Edenshaw
12

Si vous utilisez Mac OS X v10.10 (Yosemite) ou supérieur pour vous connecter à votre serveur Linux, vous pouvez essayer ces étapes.

  1. Gardez votre fichier / etc / ssh / sshd-config original

  2. Mettez votre ~ / .bash_profile

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. Courir

    dpkg-reconfigure locales

    Et sélectionnez "en_US.UTF-8"

dsandrade
la source
10
sudo nano /etc/locale.gen

Décommentez les paramètres régionaux que vous souhaitez utiliser (par exemple en_US.UTF-8 UTF-8):

Exécutez ensuite:

sudo /usr/sbin/locale-gen

Source: http://people.debian.org/~schultmc/locales.html

Thomas Jensen
la source
La société pour laquelle je travaille aux États-Unis héberge un serveur git qui a des clients internationaux. La foule GB s'est plainte que leurs clones git sur ssh auraient des problèmes en raison de différences locales. Ceci appliqué sur le serveur a résolu ce problème pour eux.
Therealstubot
10

Vous devez configurer les paramètres régionaux de manière appropriée /etc/default/locale, vous déconnecter, vous connecter , puis exécuter les commandes normales

root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
root@host:~# exit
local-user@local:~$ ssh root@host
root@host:~# locale-gen en_US.UTF-8
root@host:~# dpkg-reconfigure locales
glarrain
la source
4
ces étapes ont fonctionné pour moi (serveur Ubuntu 14.04). le point principal était de se déconnecter et de se reconnecter.
liberborn
9
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

Solution:

Essayez ceci ( uk_UA.UTF-8 est ma locale actuelle. Écrivez votre locale, par exemple en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

et ça.

sudo dpkg-reconfigure locales
bogdanvlviv
la source
Merci d'avoir résolu mon problème, après avoir fait cela et réinstallé.
madprops
8

pour moi, je corrige cette erreur en modifiant le fichier .bashrc ajouter une exportation. Ajouter après les premiers commentaires.

Ajoutez un support de langue.

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

Kind Regads,

LandiLeite
la source
6

Ajout des paramètres régionaux correct ~/.bashrc, ~/.bash_profile, /etc/environmentetc. résoudra le problème, mais il n'est pas recommandé, car il remplace les paramètres de /etc/default/locale, qui est source de confusion , au mieux , et peut conduire à des endroits ne sont pas appliquées de manière cohérente au pire.

Au lieu de cela, on devrait éditer /etc/default/localedirectement, ce qui peut ressembler à ceci:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

La modification prendra effet la prochaine fois que vous vous connecterez. Vous pouvez obtenir les nouveaux paramètres régionaux dans un shell existant en procédant /etc/default/localecomme suit :

$ . /etc/default/locale
Nuvanda
la source
1
besoin de redémarrer le système après cette étape
Ghanshyam Bagul
Vous pouvez simplement commenter dans les paramètres régionaux souhaités dans "/etc/locale.gen" puis exécuter:locale-gen
Dave Everitt
5

Pour toute personne se connectant à DigitalOcean ou à un autre fournisseur d'hébergement cloud depuis iTerm2.app sur MacOS High Sierra et obtenant cette erreur sur certaines commandes:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

Cela a résolu le problème pour moi:

entrez la description de l'image ici

Je sais que ce fil est ancien mais peut-être que quelqu'un le trouvera utile. Je sais à quel point cela peut être ennuyeux.

Blago Eres
la source
Yup était ce paramètre dans iterm2! Merci!
Brian Olsen
4

Suite à la réponse acceptée:

LANG = C ssh hunter2.

LC_ALL = C ssh hunter2

côté client a fait l'affaire pour moi.

Alex Kosenkov
la source
A fonctionné pour moi sur OSX 10.10.3, alors que "LANG = C" n'était pas suffisant. Merci Alex!
Christian
4

Avec zsh ohmyzsh, j'ai ajouté ceci à .zshrc:

 # You may need to manually set your language environment
 LANGUAGE=en_US.UTF-8
 LANG=en_US.UTF-8
 LC_CTYPE=en_US.UTF-8
 LC_ALL=en_US.UTF-8

En supprimant la ligne export LANG=en_US.UTF-8

Rouvert un nouvel onglet et SSHed, travaillé pour moi :)

Joseph Briggs
la source
3

Ajouter LC_ALL="en_GB.utf8"à /etc/environmentet redémarrer. C'est tout.

zires
la source
2

Comme toujours, le diable est dans le détail ...

Sur Mac OS X v10.7.5 (Lion), pour corriger une erreur Django , dans mon ~/.bash_profilej'ai défini:

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

Et à mon tour pendant longtemps, j'ai reçu cet avertissement lors de l'utilisation de Perl.

Ma faute! Comme je l'ai réalisé bien plus tard, mon système l'est en_US.UTF-8! Je l'ai corrigé simplement en passant de

export LANG=en_EN.UTF-8

à

export LANG=en_US.UTF-8
Luca Bonavita
la source
2

Toutes les réponses précédentes sont fausses. Le message est clair - paramètres régionaux manquants. La solution consiste à ajouter les paramètres régionaux appropriés. Pour ce faire, modifiez le fichier /etc/locale.gen, supprimez le signe # devant les paramètres régionaux signalés comme manquants, puis lancez la commande:

$ sudo locale-gen

Cela générera en fait les paramètres régionaux spécifiés dans /etc/locale.gen et donc le message ne sera pas affiché.

Matthias Hryniszak
la source
C'est tout simplement la réponse et j'ai travaillé sur l'ancienne Debian (6) pour moi. Tout le reste est trop compliqué et un peu hors piste.
Dave Everitt
2

dans mon cas, avec debian8.6, j'ai dû changer les paramètres dans:

/etc/ssh/ssh_config pour #AcceptEnv LANG LC_*

et sshd_configpour#SendEnv LANG LC_*

puis redémarrez le service ssh.

enfin

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

Java newbees
la source
2

Ajouter des paramètres régionaux manquants à .bash_profile

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

Puis sourcez votre .bash_profile

source ~/.bash_profile
Parinda Rajapaksha
la source
1

Dans mon cas, c'était la sortie:

LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....

La solution était:

sudo locale-gen ro_RO.UTF-8
Rodislav moldave
la source
1

sshécrase les variables de paramètres régionaux LC par défaut. Voir /etc/ssh/sshd_config:

AcceptEnv LANG LC_*

Alors peut-être que vous devez définir ces variables dans votre shell local.

garaboncias
la source
1

Pour moi, sur Ubuntu 16.04 (Xenial Xerus), ce qui suit a fonctionné:

root@host:~#locale-gen en_GB.UTF-8
root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8

Redémarrez ensuite ...

Aleksandar Pavić
la source