419 Stimmen

Python Locale-Fehler: nicht unterstützte Locale-Einstellung

Warum erhalte ich den folgenden Fehler, wenn ich dies in Python tue:

>>> 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

Dies gilt auch für andere Länder wie Frankreich oder Italien. Ich benutze Ubuntu 11.04.

Update: Die folgenden Schritte haben nichts ergeben:

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

16voto

Julien Palard Punkte 7481

Wenn Sie ein Debian (oder einen Debian-Fork) verwenden, können Sie Locales mit :

dpkg-reconfigure locales

12voto

Ihre Fehlermeldung besagt eindeutig, dass Sie versuchen, ein Gebietsschema zu verwenden, das nicht vorhanden ist.

>>> 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: nicht unterstützte Gebietsschema-Einstellung

Um die verfügbaren Einstellungen zu überprüfen, verwenden Sie 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

damit Sie eine davon verwenden können,

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

für de_DE

Diese Datei kann entweder manuell angepasst oder mit dem Tool update-locale aktualisiert werden.

update-locale LANG=de_DE.UTF-8

7voto

Keith Smiley Punkte 57530

Unter Arch Linux konnte ich das Problem beheben, indem ich sudo locale-gen

4voto

user3780002 Punkte 73

Meiner Meinung nach ist der einfachste Weg, das lokale Gebietsschema in Python{,3} einzurichten:

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

Dann, locale aware stuff funktioniert einfach, wenn Sie auf einem anständigen Linux-Distribution sind, und sollte auf binäre Distributionen der anderen Betriebssysteme als auch (oder das ist ein Fehler IMHO) zu arbeiten.

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

4voto

Seenu S Punkte 3109

Legen Sie es in die Dockerfile über dem 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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X