使用Jinja2和Babel,如何翻译包含HTML标签的句子?

Ken*_*der 9 jinja2 babel flask

假设我有一个Jinja2模板,我正在使用Flask-Babel来翻译我的项目.例如:

<p>The <em>best</em> way of using the Internet is
to use <a href="{{ url_for('our_site') }}">our site</a>.</p>
Run Code Online (Sandbox Code Playgroud)

所以我有一个带有链接和重点的句子.假设我想要翻译我的句子.显而易见的方法是使用gettext(){% trans %}标记:

<p>{% trans %}The {% endtrans %} <em>{% trans %}best{% endtrans %}</em>
{% trans %}way of using the Internet is to use{% endtrans %}
<a href="{{ url_for('our_site') }}">{% trans %}our site{% endtrans %}</a>{% trans %}.{% endtrans %}</p>
Run Code Online (Sandbox Code Playgroud)

显然问题在于,这会将句子分解成多个片段,这些片段无法很好地翻译.这将导致翻译人员考虑字符串"The","best","使用Internet的方式是使用","我们的网站"作为所有单独的字符串,加上标点符号.当然,译者会想要重构句子,并选择分别链接和强调的词语.

那么鉴于此,解决方案是什么?我如何在其中包含一个带有标签的句子,该句子翻译为一个单元?

Bar*_*ett 3

您可以使用 gettext() 和安全过滤器

{{ gettext('The <em>best</em> solution') | safe }}
Run Code Online (Sandbox Code Playgroud)

http://jinja.pocoo.org/docs/2.9/templates/#list-of-builtin-filters

然后您的翻译人员就可以安排标签。

如果您想让翻译变得更简单,您可以添加自定义 Markdown 过滤器并使用它在短语中添加简单的格式,请参阅此处的示例https://gist.github.com/glombard/7554134