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,也会更有效)。