我想确定,如果有给定字符串的当前语言的翻译。我想写一些类似的东西:
if not translation_available("my string"):
log_warning_somewhere()
我找不到合适的东西。 ugettext
函数只返回翻译或原始字符串(如果翻译不可用),但没有任何选项来确定翻译是否存在。
感谢。
答案 0 :(得分: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。
答案 1 :(得分:0)
因为正如你所说,如果没有可用的翻译,ugettext将返回原始字符串,你不能只是将返回的值与原始字符串进行比较,看看它们是否相同?
答案 2 :(得分:0)
def translation_available(msg): return ugettext(msg) == msg
答案 3 :(得分:0)
对于任何寻求hacky解决方案的人:
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()