Erreur de locale Python: paramètre de locale non pris en charge

pourquoi j'obtiens l'erreur suivante en faisant ceci 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 avec d'autres localités comme fr ou nl. Je suis sur Ubuntu 11.04.

mise à Jour: l'action qui suit n'a pas de produire quoi que ce soit:

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
227
demandé sur Marco Bonelli 2013-01-27 17:04:11

14 réponses

Exécuter les commandes suivantes

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

il va résoudre cela.

453
répondu Muhammad Hassan 2018-06-06 09:32:27

vous n'avez probablement pas de local de_DE disponible.

vous pouvez voir une liste des locales disponibles avec la commande locale -a . 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 voulez définir la locale à it_IT vous devez également spécifier le .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 utilisation locale:

sudo apt-get install language-pack-id

id est la langue code (tiré de ici )

après vous avez installé la locale vous devez suivre les conseils de Julien Palard et reconfigurer les locales avec:

sudo dpkg-reconfigure locales
170
répondu Bakuriu 2017-04-13 12:22:38

selon ce lien , il est résolu en entrant cette commande:

export LC_ALL=C

123
répondu Fatemeh Abdollahei 2018-06-08 00:57:27

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 que cela doit être fait sur le shell linux. cependant, si vous fournissez votre code pour travailler sur la machine client, alors c'est une mauvaise approche. J'ai aussi essayé d'exécuter les commandes ci-dessus en utilisant os.system(), mais encore il ne fonctionne pas.

la Solution qui a fonctionné pour moi est

"
locale.setlocale(locale.LC_ALL,'en_US.UTF-8')
40
répondu Ayush Vatsyayan 2018-01-22 06:30:39

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

sortie de locale est:

 $ 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 éditer ~/.bashrc:

 $ vim ~/.bashrc

ajouter les lignes suivantes après la commande ci-dessus (supposons que vous voulez en_US.UTF-8 pour être votre langue):

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

si ce fichier est en lecture seule, vous aurez besoin de suivez les étapes mentionnées par le GeekyBoy . La réponse donnée par Dr Beco dans Superuser contient des détails relatifs à la sauvegarde des fichiers en lecture seule.

après avoir sauvegardé le fichier faire:

$ source ~/.bashrc

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

30
répondu lorenzofeliz 2017-03-20 10:18:25

si vous utilisez Debian (ou Debian fork), vous pouvez ajouter des locales en utilisant:

dpkg-reconfigure locales
10
répondu Julien Palard 2013-01-27 16:16:39

sur Arch Linux j'ai pu corriger cela en exécutant sudo locale-gen

5
répondu Keith Smiley 2013-02-22 22:51:58

Pour l'enregistrement, j'ai eu ce même problème, mais aucune des solutions n'a fonctionné. J'avais mis à jour mon ordinateur et migré mon PC. J'ai eu un mixte locale en anglais et en espagnol:

$ 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 choisir l'anglais comme locale. Ce qui a finalement fonctionné a été de reconfigurer le paquet 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
3
répondu kikeenrique 2014-01-16 11:01:50
  • exécutez cette commande locale pour obtenir quelle locale est utilisée. Tels que:

LANG = en_US.UTF-8

Langue=en_US: FR

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=

  • rechercher les localités énumérées liste dans la première étape de la "151910920 de fichier". Décommentez à utilisés
  • exécuter locale-gen pour générer nouvellement ajouté régionaux
2
répondu andy 2016-08-07 04:24:20

la Place dans la Dockerfile au-dessus de la 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
1
répondu seenu s 2018-03-15 11:42:49

Cette erreur peut se produire, si vous venez d'ajouter une nouvelle locale. Vous devez redémarrer l'interpréteur de commandes interactif python ( quit( ) et python ) pour y accéder.

0
répondu Drunken Master 2015-08-27 17:33:14

en essayant d'obtenir python à crachez des noms dans le local spécifique j'ai atterri ici avec le même problème.

dans la poursuite de la réponse, les choses sont devenues un peu mystique 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') travaux

en utilisant des astuces ici j'ai testé plus loin pour voir ce qui est disponible en utilisant le 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 seul le dessus fonctionne! Mais le en_DK.UTF-8 n'est pas dans cette liste, bien que cela fonctionne!?!? Quoi?? Et la liste locale générée par python contient beaucoup de combinaisons de da et DK, que je cherche, mais encore une fois pas D'UTF-8 Pour da/DK...

je suis sur un point Linux distro (basé sur Debian), et ici locale dit entre autres LC_TIME="en_DK.UTF-8" , qui je sais fonctionne, mais pas le local dont j'ai besoin.

locale -a dit

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

si certainement besoin de installer d'autres locales , ce que j'ai fait en éditant /etc/locale.gen , uncement nécessaire ligne da_DK.UTF-8 UTF-8 et exécuter la commande locale-gen

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

Ma Conclusion:

Python: locale.locale_alias est pas du tout aidé à trouver des emplacements disponibles!!!

Linux: il est assez facile d'obtenir la liste des locales et installer de nouvelles locales. Beaucoup d'aide disponible.

fenêtres: j'ai enquêté un peu, mais rien de concluant. Il y a bien des postes menant à des réponses, mais je n'ai pas senti l'envie de poursuivre.

0
répondu DonPedro 2017-05-23 12:02:49

à mon avis, la façon la plus facile de configurer la locale en python {, 3} est:

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

alors, le truc de la conscience locale fonctionne, si vous êtes sur une distribution linux décente, et devrait fonctionner sur les distributions binaires des autres os aussi bien (ou C'est un bug IMHO).

>>> import datetime as dt
>>> print(dt.date.today().strftime("%A %d. %B %Y"))
Sonntag 11. Dezember 2016
0
répondu user3780002 2016-12-11 20:11:10

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 ne fonctionnait pas bien, toujours obtenir une erreur locale, donc j'ai décidé D'utiliser BABEL, et tout a bien fonctionné.

0
répondu Carlos 2018-02-22 22:09:07