Ich habe einige Probleme, wenn ich Gettext für Modul-und Klassen-Level-Variablen verwenden.Python, gettext: Wie bekomme ich richtige Locale für Variablen auf Modul- und Klassenebene?
Zunächst benutze ich zum Zeitpunkt des Imports mein Standardgebietsschema und installiere es. Danach erhalte ich ein spezifisches Gebietsschema, wenn ich mein Projekt starte, indem ich die Einstellungen analysiere und verwende gettext.translation.install
für das richtige Gebietsschema. Alles funktioniert gut, aber in meinem Code bleiben alle Variablen auf Modul- und Klassenebene mit Standard-Gebietsschema übersetzt, nicht richtig.
Zum Beispiel habe ich Projekt wie folgt aus:
├── foo.py
├── i18t
│ └── __init__.py
├── __init__.py
└── run.py
i18t/__init__.py
enthält:
import gettext
from os import path
SUPPORTED_LANGUAGES = ('en', 'fr')
DEFAULT_LANGUAGE = SUPPORTED_LANGUAGES[0]
locale_path = path.abspath(path.join(path.dirname(__file__), 'locale'))
TRANSLATIONS = {
lang: gettext.translation(
'domain',
locale_path,
languages=[lang]
) for lang in SUPPORTED_LANGUAGES
}
def install_language(language):
lang = TRANSLATIONS.get(language)
if lang is None:
lang = TRANSLATIONS[DEFAULT_LANGUAGE]
lang.install()
__init__.py
:
from i18n import DEFAULT_LANGUAGE, install_language
install_language(DEFAULT_LANGUAGE)
foo.py
:
foo = _('Bar')
run.py
:
from i18t import install_language
import foo
def main():
...
read config and get right locale
...
install_language(right_locale)
bar = _('Bazz')
print(foo.foo)
print(bar)
ich ausführen run.py
und ich erhalte foo.foo
mit Standard-Gebietsschema und bar
mit rechten locale übersetzt. Ich weiß, dass foo.foo
run _
(gettext) nur einmal, wenn ich das Modul importieren, aber ich muss richtig übersetzte Zeichenfolge erhalten. Welcher bessere Weg, es zu tun?