2010-09-09 3 views
7

Dieses besondere Stück Code funktioniert sehr gut auf Linux, aber nicht unter Windows:Python: gettext nicht geladen Übersetzungen auf Windows

locale.setlocale(locale.LC_ALL, '') 
gettext.bindtextdomain('exposong', LOCALE_PATH) 
gettext.textdomain('exposong') 

-Code von here

Auch wenn ich das Gebietsschema in locale.setlocale (Ich habe verschiedene Formate ausprobiert), es funktioniert nicht. Ein Problem könnte sein, dass das Gebietsschema nicht in den Umgebungsvariablen festgelegt ist (ich verwende jedoch eine deutsche Windows-Version; getestet unter XP und Vista). Wenn ich in der Befehlszeile "Set Lang=de_DE" mache, funktioniert alles wie erwartet.

Irgendwelche Ideen?

Antwort

8

Standard-gettext-Modul in Python nicht startdard Spracheinstellungen von Windows-Einstellungen verwenden, sondern verlässt sich stattdessen auf das Vorhandensein einer der Umgebungsvariablen: LANGUAGE, LC_MESSAGES, LC_ALL oder LANG. (Ich würde sagen, das ist Beispiel für slack Portierung von Unix/Linux-Bibliothek auf Windows.)

Die Umgebungsvariablen oben erwähnten nicht, die auf typischem Windows-Rechner, weil das Betriebssystem Windows und native Anwendungen Einstellungen aus der Registry verwenden, anstatt . Daher müssen Sie die Spracheinstellungen aus der Windows-Registrierung abrufen und in die Prozessumgebung übertragen.

Sie können meinen Helfer-Modul für diesen Einsatz: https://launchpad.net/gettext-py-windows

Dieser Helfer erhält die Spracheinstellungen von Windows-Einstellungen und LANG-Variable für aktuellen Prozess, so gettext diese Einstellungen verwenden kann.

Also, wenn die betreffende Anwendung nicht deins ist, können Sie Folgendes tun. Installieren Sie meinen Gettext-Helper wie gewohnt mit python setup.py install. Dann fügen Sie diese Zeilen vor locale.setlocale(locale.LC_ALL, ''):

import gettext_windows 
gettext_windows.setup_env() 

Das ist alles.

+0

Gute Arbeit! Ich werde versuchen, dies so schnell wie möglich in das Projekt zu integrieren (die Frage kommt von meinem anderen Entwickler). – bradlis7

+0

@ bradlis7 Sie sind willkommen :-) Die Lizenz von meinem Gettext_windows Helfer ist sehr permissive (MIT), so dass Sie es einfach zu Ihrer Codebasis zusammenführen und es in Ihrer Readme erwähnen können. Daher muss der Benutzer keine weitere separate Bibliotheksabhängigkeit installieren. – bialix

6

Die Erklärung vom Benutzer bialix ist korrekt. Aber anstatt ein weiteres Modul der Verwendung dieses für mich gearbeitet:

if sys.platform.startswith('win'): 
    import locale 
    if os.getenv('LANG') is None: 
     lang, enc = locale.getdefaultlocale() 
     os.environ['LANG'] = lang 

Das heißt, erhalten die Locale aus dem Lokalisierungs-Modul und die Umgebungsvariable.

Es wurde nur unter Windows 7 getestet, also überprüfen Sie es bitte vor der Verwendung in anderen Versionen.