突出显示未翻译的Django字符串

时间:2018-09-17 21:51:04

标签: django internationalization

在我的po文件中,某些字符串已翻译,但其他字符串未翻译:

msgid "Hello there"
msgstr "Hallo du"

msgid "Goodbye"
msgstr ""

按预期,这会透明地回退-我看到Goodbye,尽管没有翻译文本。但是,这些字符串很容易被忽略(尤其是在语言非常相似的情况下)。

有没有一种方法可以为未翻译的字符串添加注释,以使其显示为

UNTRANSLATED:Goodbye/UNTRANSLATED

在用户界面中,我的测试用户可以知道该字符串不是最终字符串吗?

1 个答案:

答案 0 :(得分:0)

您可以像这样对猴子django.utils.translation.trans_real.do_translate进行修补:

from django.conf import settings
from django.utils.safestring import SafeData, mark_safe
from django.utils.translation import trans_real

def highlight_untranslated():
    def monkeypatched_do_translate(message, translation_function):
        eol_message = message.replace(
            str('\r\n'), str('\n')).replace(str('\r'), str('\n'))

        if len(eol_message) == 0:
            result = type(message)("")
        else:
            trans_real._default = (
                trans_real._default or
                trans_real.translation(settings.LANGUAGE_CODE))
            translation_object = getattr(
                trans_real._active, "value", trans_real._default)

            result = getattr(
                translation_object, translation_function)(eol_message)

            # Untranslated string? If so, add a warning
            default_catalog = getattr(trans_real._default, '_catalog', None)
            if default_catalog and eol_message in default_catalog:
                catalog = getattr(translation_object, '_catalog', None)
                if catalog and eol_message not in catalog:
                    result = '__UNTRANSLATED:%s/UNTRANSLATED__' % eol_message

        if isinstance(message, SafeData):
            return mark_safe(result)

        return result

    trans_real.do_translate = monkeypatched_do_translate