在Django中,如何判断给定文本的翻译是否可用?
我想知道,是否有某个字符串的翻译成当前语言。我想写点类似这样的代码:
if not translation_available("my string"):
log_warning_somewhere()
但是我没有找到合适的方法。ugettext
这个函数只是返回翻译后的内容或者原始字符串(如果没有翻译的话),但没有办法判断翻译是否存在。
谢谢。
5 个回答
0
既然你说ugettext在没有翻译的情况下会返回原始字符串,那你是不是可以直接把返回的值和原始字符串进行比较,看看它们是否一样呢?
4
如果你在找一个简单的解决办法:
from django.utils.translation import trans_real
def custom_gettext(msg):
# Returns None when a data translation is not found
return trans_real._active.value._catalog.get(msg) # noqa
if custom_gettext("my string") is None:
log_something()
2
你可以使用 polib 来实现这个功能:https://bitbucket.org/izi/polib/wiki/Home
下面是一些大概的(未经测试)代码示例:
import polib
po = polib.pofile('path/your_language.po')
text == 'Your text'
is_translated = any(e for e in po if e.msgid == text and (not e.translated() or 'fuzzy' in e.flags) and not e.obsolete)
当有一个有效的翻译可用时,这段代码会返回 True。而单独使用 'e.translated()' 也会对模糊或过时的短语返回 True。