Gebietsschema.getlocale() Probleme auf OSX
Ich brauche, um das Gebietsschema des Systems, um eine Anzahl von Sachen tun, schließlich will ich übersetzen meiner app mit gettext. Ich werde, um es zu verteilen auf beide 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 Schwedisch Sprachen. Unter Linux die Umgebungsvariable LANG ist bereits auf "de_de.UTF-8". Wenn ich übergeben Sie die variable, um python auf OSX (LANG="sv_SE.UTF-8" python
statt), Gebietsschema erkannt wird, schön. Aber sollte nicht locale.getlocale()
in der Lage sein zu Holen, welche Sprache das Betriebssystem hat? Ich will nicht zu zwingen Benutzer, um LANG
, LC_ALL
oder beliebige Umgebungsvariablen an alle.
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=
- was ist dein output von
locale
(in der Schale) in der gleichen terminal-Fenster? - Hinzugefügte Gebietsschema-Ausgang zum original-post.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Komisch auf OSX (Smow Leopard 10.6.1) bekomme ich
Edit:
Ich habe gerade diese auf die apple-python-Mailingliste
Im Grunde hängt es davon ab, was in Ihrer Umgebung zur Laufzeit (einer LANG, LANGUAGE, LC_ALL) ich hatte LANG=de_de.UTF-8 in meinem shell-Umgebung
Addmittedly eine schreckliche hack, aber ich eingefügt dieses:
bereits zu einem frühen Zeitpunkt in ein Programm der mir. Danach konnte ich mein Programm mit unveränderter shell-Umgebung auf allen OS ' es für mich relevant (mein Programm zahlen, die Sprache, um später verwendet werden, es ist die Verarbeitung sowieso).
Sieht aus wie Sie können Gebietsschema ändern durch ändern der Umgebungsvariable
LC_ALL
.Vom hier: Versuchen Sie, hinzufügen oder Bearbeiten der
~/.profile
oder~/.bash_profile
Datei, um ordnungsgemäß exportieren Sie Ihre locale-Einstellungen bei der Initiierung einer neuen Sitzung.Alte Frage, aber das kann auch anderen helfen: dies ist ein Python-Fehler, die ab März 2016 ist noch nicht gelöst, in entweder Python 2 oder 3: https://bugs.python.org/issue18378 .
In der Zusammenfassung wird davon ausgegangen, dass Python GNU-wie Gebietsschemas und Balken auf (POSIXly richtige) Abweichungen, wie die in BSD-Umgebungen (wie OS X). Und die UTF8-locale existiert in BSD, nicht Linux, daher das problem.
Als für Lösungen oder debugging: die lokalen environment-Variablen gesetzt werden können, durch das Terminal.app (siehe Einstellungen - Profile - Advanced - International; in ähnlicher Weise also für iTerm oder was auch immer). So kann man die locale-Umgebungsvariablen festlegen, wenn Sie in einem terminal-Fenster, aber Sie finden die Variablen NICHT gesetzt, wenn die Ausführung einer Standardanwendung.
Einigen Fällen (wie Sphinx in python 2.7 und 3.5 sterbenden in OS X, weil der "ValueError: unknown locale: UTF-8"), deaktivieren die Präferenz checkbox locale-Umgebungsvariablen ist die Lösung.
Aber, die Probleme verursachen können, die in anderen Programmen: wenn die locale vars sind nicht festgelegt, bash 4.3 (von MacPorts) beschweren sich bei jeder Eingabeaufforderung mit "Warnung: setlocale: LC_CTYPE: cannot change locale (): Keine solche Datei oder das Verzeichnis" ...
So, da der Fehler in Python, der workaround sollte vermutlich in das python-Programm (wie in @Jacob Oscarson Antwort) - oder python-Aufruf (durch festlegen der locale-Einstellung vars, um einige angemessene Wert).