gpt4 book ai didi

python - 我可以同时调用和设置库中的 Python gettext 模块和使用它的模块吗?

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:07 25 4
gpt4 key购买 nike

我正在编写一个包含我需要翻译的文本反馈的库。

我将以下几行放在一个 _config.py 模块中,我在我的应用程序中随处导入:

import gettext, os, sys
pathname = os.path.dirname(sys.argv[0])
localdir = os.path.abspath(pathname) + "/locale"
gettext.install("messages", localdir)

我在 ./locale/lang_LANG/LC_MESSAGES 中有 *.mo 文件,我将 _() 函数应用于所有需要翻译的字符串。

现在我刚刚为用户添加了一个功能,假设是程序员,能够创建他自己的消息。我不想让他关心底层的实现,所以我希望他能够像这样简单明了:

lib_object.message = "My message"

我使用属性让它变得干净,但是如果我的用户想要翻译他自己的代码(使用我的代码)并做类似的事情怎么办:

import gettext, os, sys
pathname = os.path.dirname(sys.argv[0])
localdir = os.path.abspath(pathname) + "/locale"
gettext.install("user_app", localdir)

lib_object.message = _("My message")

有问题吗?我该怎么做才能在不打扰用户的情况下避免麻烦?

最佳答案

您可以使用基于类的 gettext api 来隔离消息目录。这也是 python gettext documentation 中推荐的内容。 .

缺点是您或其他开发人员必须使用 gettext 方法或在本地范围内定义 _() 方法,绑定(bind)到特定的 gettext 类。具有自己的字符串目录的类示例:

import gettext

class MyClass(object):
def __init__(self, locale_for_instance):
self.lang = gettext.translation("appname", localedir, \
locale=locale_for_instance)

def some_method(self, arg):
return self.lang.gettext("You called some method")

def other_method(self, arg): # does the same thing
_ = self.lang.gettext
return _("You called some method")

您可以将用于添加 _() 的代码粘贴到装饰器中,因此所有需要它的方法都带有前缀,如 @with_local_gettext

(注意,我没有测试过上面的方法,但它应该可以正常工作(tm))

如果目标是不打扰您的用户(而且他不是很好),我想您可以在代码中使用基于类的方法并让用户使用全局方法。

关于python - 我可以同时调用和设置库中的 Python gettext 模块和使用它的模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/246137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com