如何知道gettext是否存在翻译字符串?

时间:2016-02-04 10:33:52

标签: python gettext

我想知道是否可以在运行时检查gettext中是否存在要翻译的字符串。

仅用于调试目的。

有时候要翻译的字符串会稍微更新一下,没有人会想更新po文件。错误一直持续到有人找到它或者因为其他原因决定更新po文件。

如果有更好的方法来管理这个案例,我也很感兴趣。

1 个答案:

答案 0 :(得分:0)

它有点hacky,但它有效吗? 我将翻译课程的后备设置为自定义的,以便在找不到翻译时通知我们。不确定你的设置是什么,但是这个的一些变体应该可行,对吗?

# translate.py
import gettext
import os.path

missed_translations = set()
class MyFallback(gettext.NullTranslations):
    def gettext(self, msg):
        # do whatever you want to do when no translation found
        # like log a message, or email someone, or raise an exception
        missed_translations.add(msg)
        return msg

class MyTranslations(gettext.GNUTranslations, object):
    def __init__(self, *args, **kwargs):
        super(MyTranslations, self).__init__(*args, **kwargs)
        self.add_fallback(MyFallback())

lang1 = gettext.translation(
    "translate",
    localedir=os.path.expanduser("~/Projects/translate/locale"),
    languages=["es"],
    class_=MyTranslations
)
lang1.install()
print(_("Hello World"))
print(_("Hello world"))
print(_("nope"))

print("Missing translations for: " + ", ".join(missed_translations))

我想要重现的目录结构:

├── __init__.py
├── locale
│   ├── es
│   │   └── LC_MESSAGES
│   │       └── translate.mo
│   └── messages-es_ES.po
└── translate.py

运行它看起来像这样:

$> python translate.py
Hola Mundo
Hello world
nope
Missing translations for: nope, Hello world