【发布时间】:2016-06-23 17:34:41
【问题描述】:
在请求翻译 gettext 中的字符串时,我正在寻找一种即时设置语言的方法。我会解释为什么:
我有一个多线程机器人,它通过多个服务器上的文本响应用户,因此需要以不同的语言回复。 gettext 的documentation 指出,要在运行时更改语言环境,您应该执行以下操作:
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()
但是,这不适用于我的情况,因为机器人是多线程的:
想象以下 2 个 sn-ps 同时运行:
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 :'(
和
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
您可以看到有时会在错误的语言环境中翻译消息。
但是,如果我能做类似_("string", lang="FR") 的事情,问题就会消失!
我是否遗漏了什么,或者我使用了错误的模块来完成任务... 我正在使用python3
【问题讨论】:
-
也许我的问题措辞不好?我该如何改进它?
-
您没有提供足够的信息让他人轻松重现您的问题。我必须弄清楚如何使用
gettext并创建一个最小的翻译设置。理想情况下,您应该提供minimal reproducible example。 -
显然不要使用
install...直接在实例上调用gettext。 (无论如何,与builtins混在一起很讨厌)。
标签: python multithreading python-3.x internationalization gettext