Frage

Ich brauche das Systemgebietsschema erhalten eine Reihe von Dingen zu tun, schließlich möchte ich meine App gettext übersetzen. Ich werde es verteilen, auf Linux und OSX, aber ich lief in Probleme auf OSX Snow Leopard:

$ python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'sv_SE.UTF-8'
>>> locale.getlocale()
('sv_SE', 'UTF8')

$ python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'C'
>>> locale.getlocale()
(None, None)

Beide Systeme sind mit schwedischer Sprache. Unter Linux wird die Umgebungsvariable LANG bereits auf „sv_SE.UTF-8“. Wenn ich das variable geben OSX (LANG="sv_SE.UTF-8" python statt) Python, wird locale gut erkannt. Aber sollte nicht locale.getlocale()be der Lage zu holen, was Sprache das Betriebssystem? Ich will nicht, um Benutzer zwingen LANG, LC_ALL oder eine Umgebungsvariable zu setzen überhaupt.

Ausgabe von locale Befehl:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
War es hilfreich?

Lösung

Odd auf OSX (smow Leopard 10.6.1) bekomme ich

$ python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.  
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.setlocale(locale.LC_ALL, '')
'en_GB.UTF-8'
>>> locale.getlocale()
('en_GB', 'UTF8')

Edit:

Ich habe gerade diese auf der Apfel Python-Mailingliste

Im Grunde ist es hängt davon ab, was in Ihrer Umgebung zur Laufzeit festgelegt ist (eine von LANG, Sprache, LC_ALL) Ich hatte LANG = en_GB.UTF-8 in meiner Shell-Umgebung

Andere Tipps

Addmittedly eine schreckliche Hack, aber ich eingefügt folgt aus:

import platform

# ...

# XXX horrendous OS X invalid locale hack
if platform.system() == 'Darwin':
    import locale
    if locale.getlocale()[0] is None:
        locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

zu einem frühen Zeitpunkt in einem Programm von Mine . Danach konnte ich mein Programm mit unmodifizierten Shell-Umgebung auf allen OS'es relevant für mich (mein Programm findet heraus, die Sprache später verwendet werden, in es Verarbeitung sowieso) ausgeführt werden.

Sieht aus wie Sie locale, indem die Umgebungsvariable LC_ALL ändern können.

$ export LC_ALL=C
$ python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.setlocale(locale.LC_ALL, "")
'C'
>>> locale.getlocale()
(None, None)    

$ export LC_ALL=en_GB.UTF-8
$ python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.setlocale(locale.LC_ALL, "")
'en_GB.UTF-8'
>>> locale.getlocale()
('en_GB', 'UTF8')

hier : Versuchen Sie, oder Bearbeitung der ~/.profile oder ~/.bash_profile Datei für sie richtig auf die Einleitung einer Ihrer lokalen Einstellungen exportieren neue Sitzung.

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

Alte Frage, aber das kann andere helfen: Dies ist ein Python-Fehler, der ab März 2016 noch in entweder ungelöst ist Python 2 oder 3: https://bugs.python.org/issue18378 .

Die Zusammenfassung ist, dass Python übernimmt GNU-ähnliche Gegenden und balks auf (POSIXly korrekt) Divergenzen wie die in BSD-Umgebungen (wie OS X). Und die UTF8 locale existieren in BSD, nicht in Linux, damit das Problem.

Wie bei Lösungen oder Debugging: die lokalen Umgebungsvariablen können durch Terminal.app eingestellt werden (siehe Einstellungen - Profile - Erweitert - Internationale, in ähnlicher Weise so für iTerm oder was auch immer). So kann man die locale Umgebungsvariablen gesetzt, wenn in einem Terminal-Fenster finden, aber finden die Variablen nicht gesetzt, wenn eine verpackte Anwendung ausgeführt wird.

Für einige Fälle (wie Sphinx in Python 2.7 und 3.5 in OS X zu sterben, weil der "Valueerror: unbekannt locale: UTF-8")., Die Präferenz Checkbox deaktivieren locale Umgebungsvariablen zu setzen ist die Lösung

Aber das kann Probleme in anderen Programmen führt: Wenn die locale Vars nicht gesetzt ist, bash 4.3 (von MacPorts) wird bei jeder Aufforderung beschweren mit „Warnung: setlocale: LC_CTYPE: nicht locale ändern (): Keine solche Datei oder ein Verzeichnis "...

So gegeben, dass der Fehler in Python ist, sollte die Abhilfe wahrscheinlich im Python-Programm durchgeführt werden (wie in @Jacob Oscarson Antwort) oder Python-Aufruf (durch die Lokalisierungs-Einstellungen Vars zu einem gewissen angemessenen Wert).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top