Django 1.6 Block Trans 不使用变量

Django 1.6 Block Trans not working with variable

我正在尝试翻译一段带有块 trans 标签的文本,如下所示:

{% 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>"

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

您必须将变量传递给 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 %}