我正在尝试使用块转换标记翻译一段文本,如下所示:
{% 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。
答案 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 %}