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
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.
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
où 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
selon ce lien , il est résolu en entrant cette commande:
export LC_ALL=C
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')
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.
si vous utilisez Debian (ou Debian fork), vous pouvez ajouter des locales en utilisant:
dpkg-reconfigure locales
sur Arch Linux j'ai pu corriger cela en exécutant sudo locale-gen
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
- 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
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
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.
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.
à 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
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é.