我想知道是否可以在运行时检查gettext中是否存在要翻译的字符串。
仅用于调试目的。
有时候要翻译的字符串会稍微更新一下,没有人会想更新po文件。错误一直持续到有人找到它或者因为其他原因决定更新po文件。
如果有更好的方法来管理这个案例,我也很感兴趣。
答案 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