Ich suche nach einer Möglichkeit, die Sprache im laufenden Betrieb einzustellen, wenn Sie eine Übersetzung für eine Zeichenkette in gettext anfordern. Ich werde erklären, warum:Python gettext: Gebietsschema in _ angeben()
Ich habe einen Multithread-Bot, die auf Benutzer durch Text auf mehreren Servern reagieren und so in verschiedenen Sprachen antworten müssen. Die documentation von gettext besagt, dass locale zu ändern, während ausführen, sollten Sie Folgendes tun:
import gettext # first, import gettext
lang1 = gettext.translation('myapplication', languages=['en']) # Load every translations
lang2 = gettext.translation('myapplication', languages=['fr'])
lang3 = gettext.translation('myapplication', languages=['de'])
# start by using language1
lang1.install()
# ... time goes by, user selects language 2
lang2.install()
# ... more time goes by, user selects language 3
lang3.install()
Aber dies gilt nicht, in meinem Fall, da der Bot multithreaded ist:
die 2 Stellen Sie sich vor folgende Schnipsel zur gleichen Zeit ausgeführt werden:
import time
import gettext
lang1 = gettext.translation('myapplication', languages=['fr'])
lang1.install()
message(_("Loading a dummy task")) # This should be in french, and it will
time.sleep(10)
message(_("Finished loading")) # This should be in french too, but it wont :'(
und
import time
import gettext
lang = gettext.translation('myapplication', languages=['en'])
time.sleep(3) # Not requested on the same time
lang.install()
message(_("Loading a dummy task")) # This should be in english, and it will
time.sleep(10)
message(_("Finished loading")) # This should be in english too, and it will
Sie können sehen, dass Nachrichten manchmal in der falschen Ländereinstellung übersetzt werden. Aber wenn ich etwas wie _("string", lang="FR")
tun könnte, würde das Problem verschwinden!
Habe ich etwas verpasst, oder ich das falsche Modul mit der Aufgabe zu tun ... Ich verwende python3
Vielleicht habe ich meine Frage schlecht formuliert? Wie kann ich es verbessern? – WayToDoor
Sie haben nicht genügend Informationen zur Verfügung gestellt, damit jemand Ihr Problem problemlos reproduzieren kann.Ich musste herausfinden, wie man 'gettext' verwendet und ein minimales Übersetzungssetup erstellt. Im Idealfall würden Sie eine [MCVE] bereitstellen. –
Verwenden Sie einfach nicht 'install' offensichtlich ... rufen Sie' gettext' direkt auf den Instanzen auf. (mit 'Builtins' zu spielen ist sowieso böse). – o11c