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

时间:2016-06-02 17:42:24

标签: flask jinja2 babel

假设我有一个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>

所以我有一个带有链接和重点的句子。假设我想要翻译我的句子。显而易见的方法是使用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>

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

所以鉴于此,解决方案是什么?如何在其中添加带有标签的句子,将其翻译为一个单元?

2 个答案:

答案 0 :(得分:1)

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

java.util.Map

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

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

如果您想让翻译人员更简单一点,您可以添加自定义降价过滤器并使用在短语中添加简单格式的过滤器,请参阅此处以获取示例https://gist.github.com/glombard/7554134

答案 1 :(得分:0)

您可以这样做:

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

与对象嵌套变量(obj.site_name)相同:

{% trans url=url_for('our_site'), site_name=obj.site_name %}
<p>The <em>best</em> way of using the Internet is
to use <a href="{{ url }}">our site</a>{{ site_name }}.</p>
{% endtrans %}

因此您必须将变量声明为trans函数参数,否则trans将不起作用。要了解更多信息,请访问docs