在Django中,如何确定给定文本的翻译是否可用?

时间:2010-11-06 21:16:51

标签: python django internationalization

我想确定,如果有给定字符串的当前语言的翻译。我想写一些类似的东西:

if not translation_available("my string"):
    log_warning_somewhere()

我找不到合适的东西。 ugettext函数只返回翻译或原始字符串(如果翻译不可用),但没有任何选项来确定翻译是否存在。

感谢。

4 个答案:

答案 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()