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

10 投票
5 回答
2404 浏览
提问于 2025-04-16 06:41

我想知道,是否有某个字符串的翻译成当前语言。我想写点类似这样的代码:

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

但是我没有找到合适的方法。ugettext 这个函数只是返回翻译后的内容或者原始字符串(如果没有翻译的话),但没有办法判断翻译是否存在。

谢谢。

5 个回答

0

既然你说ugettext在没有翻译的情况下会返回原始字符串,那你是不是可以直接把返回的值和原始字符串进行比较,看看它们是否一样呢?

4

如果你在找一个简单的解决办法:

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

撰写回答