Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中,如何确定给定文本的翻译是否可用?_Python_Django_Internationalization - Fatal编程技术网

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

Python 在Django中,如何确定给定文本的翻译是否可用?,python,django,internationalization,Python,Django,Internationalization,我想确定,对于给定的字符串,是否有到当前语言的翻译。我想写一些类似于: if not translation_available("my string"): log_warning_somewhere() 我觉得没有什么合适的。ugettext函数只返回翻译或原始字符串(如果翻译不可用),但没有任何选项来确定翻译是否存在 谢谢。正如您所说,如果没有翻译,ugettext将返回原始字符串,您不能将返回的值与原始字符串进行比较,看看它们是否相同吗?您可以使用polib: def trans

我想确定,对于给定的字符串,是否有到当前语言的翻译。我想写一些类似于:

if not translation_available("my string"):
    log_warning_somewhere()
我觉得没有什么合适的。
ugettext
函数只返回翻译或原始字符串(如果翻译不可用),但没有任何选项来确定翻译是否存在


谢谢。

正如您所说,如果没有翻译,ugettext将返回原始字符串,您不能将返回的值与原始字符串进行比较,看看它们是否相同吗?

您可以使用polib:

def translation_available(msg): return ugettext(msg) == msg
沿着这些(未经测试的)代码行:

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)

当有有效的翻译可用时,这将成为现实。”e、 translated()'单独对模糊和/或过时的短语都返回True。

对于任何寻求黑客解决方案的人:

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

谢谢你的回答,但这不是我一直在寻找的。在某些语言中,某些字符串可能被有意翻译为英语字符串,而在其他语言中,倾向于翻译所有内容,翻译是存在的。所以这会给出错误的警告。我想检测是否缺少翻译。感谢您的回答,但正如我在上面所写的:如果我有意将字符串翻译为英语,这将给出错误警告。这太依赖巧合了。
对于采购订单中的e.translated_entries()
。。。可能会更有效吗?对于任何未翻译的匹配条目,这不会返回true吗?我相信,您可以对NullTranslationCatalog的gettext方法进行修补。一旦你到达这个目录,这意味着你已经绕过了所有的翻译,所以你可以在那里记录你的警告。可能最好向Django提交一个补丁:)它肯定比公认的答案更有效(而且,我怀疑如果使用mofile而不是pofile,也会更有效)。