Django 1.6 Block Trans无法使用变量

时间:2015-08-21 14:23:04

标签: python django internationalization translation

我正在尝试使用块转换标记翻译一段文本,如下所示:

{% url 'mymodel.view.results' result_id as results_url %}
{% blocktrans %}See your results here: <a href='{{results_url}}'>Results</a>{% endblocktrans %}

即使正在翻译其周围的所有文本,也不会翻译块trans中的文本。翻译未标记为模糊,在.po文件中,文本如下所示:

#: templates/results.html:10
4
#, python-format
msgid ""
"See your results here: "
"<a href='%(results_url)s'>Results</a>"
msgstr ""
"Para su conveniencia <a "
"href='%(results_url)s'>Resultados </a>"

翻译出现的方式有什么不对吗?我注意到它在块trans中显示%()而不是{{}}。但是我假设这是django将它标记为po文件中的变量的方式。我该怎么做才能使翻译适用于包含变量的块trans。

1 个答案:

答案 0 :(得分:2)

您必须将变量传递到blocktrans才能在内部使用它们。没有这个,django就无法翻译这句话,因为在渲染时它看起来像这样:

sentence = _('See your results here: <a href='%(results_url)s'>Results</a>" % {'results_url': results_url})

换句话说,每次渲染模板时,翻译引擎都会获取已填充results_url的字符串。

您必须使其等同于该代码:

sentence = _('See your results here: <a href='%(results_url)s'>Results</a>") % {'results_url': results_url}

要做到这一点,只需将变量传递给blocktrans:

{% blocktrans with results_url=results_url %}See your results here: <a href='{{results_url}}'>Results</a>{% endblocktrans %}