Erreur de paramètres régionaux Python: paramètre de paramètres régionaux non pris en charge

317

Pourquoi est-ce que j'obtiens l'erreur suivante en faisant cela en python:

>>> import locale
>>> print str( locale.getlocale() )
(None, None)
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 531, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

Cela fonctionne également avec d'autres paramètres régionaux comme fr ou nl. J'utilise Ubuntu 11.04.

Mise à jour: Faire ce qui suit n'a rien donné:

dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = (unset)
    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_ALL to default locale: No such file or directory
toom
la source
8
Avez-vous une de_DEliste dans locale -a? Sinon, vous devez l' installer .
Bakuriu
1
Connexes: un script bash pour installer tous les paramètres régionaux sur Ubuntu.
rkrzr
12
locale.setlocale(locale.LC_ALL, 'de_DE')est faux. Vous en avez besoin locale.setlocale(locale.LC_ALL, 'de_DE.utf8').
Martin Thoma
2
Vous pouvez parfois découvrir un codage disponible pour la langue / pays que vous voulez en utilisant l'alias intégrés: locale.setlocale(locale.LC_ALL, locale.locale_aliases['de_DE']).
jrgray

Réponses:

647

Exécutez les commandes suivantes

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

Cela résoudra cela.

Assurez-vous de faire correspondre la .UTF-8pièce à la syntaxe réelle trouvée par locale -aexemple .utf8sur certains systèmes.

Muhammad Hassan
la source
8
Je n'ai pas eu à utiliser la commande dpkg. Après tout, si le problème se produit localement, la vraie solution serait d'ajouter les deux premières commandes à vos applications de démarrage.
RolandiXor
2
Ça n'a pas marché pour moi. export LC_ALL="en_US.UTF-8"a échoué avec -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) ce qui a fonctionné:export LC_ALL=C
Jonathan
205

Selon ce lien , il a résolu en entrant cette commande:

export LC_ALL = C

Fatemeh Abdollahei
la source
4
Qu'est-ce que ça veut dire? - ok, il définit un environnement varibale LC_ALLà la valeur 'C'- mais pourquoi cela devrait-il fonctionner?
Martin Thoma
3
Pourquoi LC_ALL fonctionne -> unix.stackexchange.com/questions/87745/what-does-lc-all-c-do
Ferhat
Je recherche et j'essaie à chaque fois que je change d'ordinateur et cela fonctionne à chaque fois, contrairement aux autres méthodes.
MinKi Jo
197

Vous n'avez probablement pas de de_DEparamètres régionaux disponibles.

Vous pouvez afficher une liste des paramètres régionaux disponibles avec la locale -acommande. Par exemple, sur ma machine:

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
it_CH.utf8
it_IT.utf8
POSIX

Notez que si vous souhaitez définir les paramètres régionaux sur it_ITvous devez également spécifier .utf8:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'it_IT')   # error!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 539, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8')
'it_IT.utf8'

Pour installer une nouvelle locale, utilisez:

sudo apt-get install language-pack-id

idest le code de langue (extrait d' ici )

Après avoir installé les paramètres régionaux, vous devez suivre les conseils de Julien Palard et reconfigurer les paramètres régionaux avec:

sudo dpkg-reconfigure locales
Bakuriu
la source
Cela ne fonctionnait pas dans mon docker Debian. Mais cela a fonctionné. stackoverflow.com/questions/28405902/…
Chris
45

L'une des réponses ci-dessus fournit la solution:

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

Le problème avec la solution ci-dessus est qu'elle doit être effectuée sur le shell Linux. Cependant, si vous fournissez votre code pour qu'il fonctionne sur la machine cliente, c'est une mauvaise approche. J'ai également essayé d'exécuter les commandes ci-dessus en utilisant os.system (), mais cela ne fonctionne toujours pas.

La solution qui a fonctionné pour moi est

locale.setlocale(locale.LC_ALL,'en_US.UTF-8')
Ayush Vatsyayan
la source
32

Une solution plus permanente serait de remplir les valeurs manquantes, dans la sortie affichée par la commande: locale

La sortie de localeest:

 $ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Pour remplir les valeurs manquantes, éditez ~ / .bashrc:

 $ vim ~/.bashrc

Ajoutez les lignes suivantes après la commande ci-dessus (supposons que vous vouliez que en_US.UTF-8 soit votre langue):

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

Si ce fichier est en lecture seule, vous devrez suivre les étapes mentionnées par The GeekyBoy . La réponse donnée par le Dr Beco dans Superuser contient des détails concernant la sauvegarde des fichiers en lecture seule.

Après avoir enregistré le fichier, procédez comme suit:

$ source ~/.bashrc

Maintenant, vous ne serez plus confronté au même problème.

lorenzofeliz
la source
15

Si vous êtes sur un Debian (ou un fork Debian), vous pouvez ajouter des locales en utilisant:

dpkg-reconfigure locales
Julien Palard
la source
Le dpkg-reconfigure localesmenu vous propose- t- il un menu local comme celui-ci: vpser.net/uploads/2013/01/dpkg-reconfigure-locales-1.jpg ?
Julien Palard
Nan. Je viens de recevoir la sortie que j'ai publiée dans la mise à jour de ma question.
toom
6

Sur Arch Linux, j'ai pu résoudre ce problème en exécutant sudo locale-gen

Keith Smiley
la source
4

Pour mémoire, j'ai eu ce même problème, mais aucune des solutions n'a fonctionné. J'avais mis à niveau mon ordinateur et migré mon PC. J'avais une langue anglaise et espagnole mixte:

$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Mais, sur ma nouvelle installation Debian, je viens de sélectionner l'anglais comme locale. Ce qui a finalement fonctionné était de reconfigurer le paquetage locales pour ajouter et générer de l'espagnol aussi.

$ grep -v "#" /etc/locale.gen 
en_US.UTF-8 UTF-8
es_ES.UTF-8 UTF-8
kikeenrique
la source
4

Ouvrez simplement le fichier .bashrc et ajoutez-le

export LC_ALL = C

puis tapez source .bashrc dans le terminal.

Saroj Rai
la source
4

Votre erreur indique clairement que vous essayez d'utiliser les paramètres régionaux quelque chose n'était pas là.

>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 581, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

locale.Error: paramètre de locale non pris en charge

Pour vérifier le paramètre disponible, utilisez locale -a

deb@deb-Latitude-E7470:/ambot$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX

vous pouvez donc en utiliser un parmi,

>>> locale.setlocale(locale.LC_ALL, 'en_AG.utf8')
'en_AG.utf8'
>>> 

pour de_DE

Ce fichier peut être ajusté manuellement ou mis à jour à l'aide de l'outil, update-locale.

update-locale LANG=de_DE.UTF-8
Mohideen bin Mohammed
la source
2
  • exécutez cette commande localepour obtenir les paramètres régionaux utilisés. Tel que:

LANG = en_US.UTF-8
LANGUAGE = en_US: en
LC_CTYPE = zh_CN.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 =

  • recherchez la liste des paramètres régionaux répertoriés à la première étape du /etc/locale-genfichier. Ne commentez pas ceux utilisés
  • exécuter locale-genpour générer des paramètres régionaux nouvellement ajoutés
Andy
la source
2

À mon avis, la façon la plus simple de configurer les paramètres régionaux locaux en python {, 3} est:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'de_DE.UTF-8'

Ensuite, les choses sensibles aux paramètres régionaux fonctionnent juste, si vous êtes sur une distribution Linux décente, et devraient également fonctionner sur les distributions binaires des autres systèmes d'exploitation (ou c'est un bogue à mon humble avis).

>>> import datetime as dt
>>> print(dt.date.today().strftime("%A %d. %B %Y"))
Sonntag 11. Dezember 2016
user3780002
la source
2

Placez-le dans le Dockerfiledessus du ENV.

# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

ENV LANG en_US.UTF-8
Seenu S
la source
Merci, j'ai essayé les autres solutions (dpkg-reconfigure locales, locale-gen) et rien d'autre n'a fonctionné dans mon conteneur debian: 9. Est-ce vraiment une / la façon standard de créer la locale en_US.UTF-8?
jamshid
Oui, je pense que c'est la manière standard en_US.UTF-8 locale. Lorsque vous exécutez localedans le terminal, obtenez `LANG = en_US.UTF-8 et d'autres paramètres régionaux? stackoverflow.com/questions/36394101/…
Seenu S
1

Cette erreur peut se produire si vous venez d'ajouter un nouvel environnement local. Vous devez redémarrer le shell interactif python ( quit() et python) pour y accéder.

imrek
la source
1

Si j'étais vous, j'utiliserais BABEL: http://babel.pocoo.org/en/latest/index.html

J'ai eu le même problème ici en utilisant Docker, j'ai essayé chaque étape et je ne fonctionnais pas bien, obtenant toujours une erreur locale, j'ai donc décidé d'utiliser BABEL, et tout fonctionnait bien.

Carlos
la source
0

En essayant d'obtenir que python crache des noms dans des paramètres régionaux spécifiques, j'ai atterri ici avec le même problème.

En cherchant la réponse, les choses sont devenues un peu mystiques, je trouve.

J'ai trouvé ce code python.

import locale
print locale.getdefaultlocale()
>> ('en_DK', 'UTF-8')

Et en effet locale.setlocale(locale.LC_TIME, 'en_DK.UTF-8')fonctionne

En utilisant des conseils ici, j'ai testé davantage pour voir ce qui est disponible en utilisant du code python

import locale
loc_list = [(a,b) for a,b in locale.locale_alias.items() ]
loc_size = len(loc_list)
print loc_size,'entries'

for loc in loc_list:
    try:
        locale.setlocale(locale.LC_TIME, loc[1])
        print 'SUCCES set {:12} ({})'.format(loc[1],loc[0])
    except:
        pass

qui donne

858 entries
SUCCES set en_US.UTF-8  (univ)
SUCCES set C            (c.ascii)
SUCCES set C            (c.en)
SUCCES set C            (posix-utf2)
SUCCES set C            (c)
SUCCES set C            (c_c)
SUCCES set C            (c_c.c)
SUCCES set en_IE.UTF-8  (en_ie.utf8@euro)
SUCCES set en_US.UTF-8  (universal.utf8@ucs4)
SUCCES set C            (posix)
SUCCES set C            (english_united-states.437)
SUCCES set en_US.UTF-8  (universal)

Dont seulement ci-dessus fonctionne! Mais le en_DK.UTF-8n'est pas dans cette liste, bien que cela fonctionne!?!? Quoi?? Et la liste des paramètres régionaux générés par python contient beaucoup de combos de da et DK, que je recherche, mais encore une fois pas UTF-8 pour da / DK ...

Je suis sur une distribution Point Linux (basée sur Debian), et ici localedit entre autres LC_TIME="en_DK.UTF-8", que je connais fonctionne, mais pas les paramètres régionaux dont j'ai besoin.

locale -a dit

C
C.UTF-8
en_DK.utf8
en_US.utf8
POSIX

Donc , je dois absolument installer d'autres paramètres régionaux , ce que j'ai fait en modifiant /etc/locale.gen, décommentez la ligne nécessaire da_DK.UTF-8 UTF-8et exécutez la commandelocale-gen

Fonctionne maintenant locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8')aussi, et je peux obtenir mes noms de jour et de mois localisés.

Ma conclusion:

Python: locale.locale_alias n'est pas du tout utile pour trouver les locales disponibles !!!

Linux: Il est assez facile d'obtenir la liste des paramètres régionaux et d'installer de nouveaux paramètres régionaux. Beaucoup d'aide disponible.

Windows: J'ai enquêté un peu, mais rien de concluant. Il y a bien des messages conduisant à des réponses, mais je n'ai pas ressenti le besoin de les poursuivre.

DonPedro
la source
0

si je comprends bien, la principale source d'erreur ici est la syntaxe exacte du nom-local. D'autant plus qu'il semble différer entre les distributions. J'ai vu mentionné ici dans différentes réponses / commentaires:

de_DE.utf8
de_DE.UTF-8

Même si c'est évidemment la même chose pour un être humain, il n'en va pas de même pour votre algorithme déterministe standard.

Vous ferez donc probablement quelque chose dans le sens de:

DESIRED_LOCALE=de
DESIRED_LOCALE_COUNTRY=DE
DESIRED_CODEPAGE_RE=\.[Uu][Tt][Ff].?8
if [ $(locale -a | grep -cE "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}") -eq 1 ]
then
    export LC_ALL=$(locale -a | grep -m1 -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")
    export LANG=$LC_ALL
else
    echo "Not exactly one desired locale definition found: $(locale -a | grep -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")" >&2
fi
Torge Husfeldt
la source
0

python recherche .UFT-8, mais vous avez probablement .utf8 essayez d'installer les packages .UFT-8 avec sudo dpkg-reconfigure locales

Peter Frumau
la source
-2

tout d'abord, assurez-vous que le module linguistique est installé en procédant comme suit:

sudo apt-get install language-pack-en-base


sudo dpkg-reconfigure locales
Yaron Soffer
la source
le pack de langue anglais est installé par défaut - de plus la réponse est déjà donnée ici et celle-ci manque de formatage.
Skandix