使用Flask-Babel翻译Jinja2模板中列表中的元素

时间:2018-06-04 12:52:04

标签: flask internationalization jinja2 flask-babel

我有一个Jinja2模板,菜单项在Jinja2列表中定义如下:

{% set nav = [
    ('Foo', 'user.foo'),
    ('Bar', 'user.bar'),
] %}

稍后在模板中我有一个for循环:

{% for title, endpoint in nav %}
  {% if endpoint == request.endpoint %}
    <li class="active"><a href="{{ url_for(endpoint) }}">{{ title|title }}</a></li>
  {% else %}
    <li><a href="{{ url_for(endpoint) }}">{{ title|title }}</a></li>
  {% endif %}
{% endfor %}

我应该如何在我的示例中使用{%trans%}或{{gettext()}}来正确翻译菜单项?我尝试将{%trans%}放入for循环中,但没有取得任何成功。有没有办法翻译模板中定义的列表元素?

1 个答案:

答案 0 :(得分:1)

只需翻译菜单:

{% set nav = [
    (_('Foo'), 'user.foo'),
    (_('Bar'), 'user.bar'),
] %}

_(...)gettext(...)的简短别名。

一般情况下,您应该将文本翻译成定义的位置,这样就可以减少文本损坏的风险,从而减少翻译。