Flask-Babel如何在Jinja模板文件中使用翻译

14

在我的Flask应用程序中,位于main.py文件中,我定义了:

from flaskext.babel import gettext
....
def somefun():
    return render_template('some.html', messages=messages)
在模板文件some.html中,我使用了:
<input type='text' name='keywords' value='{{ keywords|default('') }}' placeholder='{{ gettext('Search...') }}' />

这会报错:

<input type='text' name='keywords' value='{{ keywords|default('') }}' placeholder='{{ gettext('Search...') }}' />
UndefinedError: 'gettext' is undefined

如何将此函数导入模板中使用?

1个回答

28

很不幸,这并没有被完全记录下来,但Flask-Babel会透明地使用Jinja2的i18n扩展。这意味着默认情况下,以下表达式函数可用:gettextngettext_

还可以使用模板标签:

{% trans %}foo{% endtrans%}

{% trans num %}
There is {{ num }} object.
{% pluralize %}
There are {{ num }} objects.
{% endtrans %}

还有一个缺失文档的错误报告正在等待修补 ;)


2
这不是真的,我不能在没有任何导入操作的情况下使用“_”。 - Brent Jiang
@BrentJiang 你是否已经初始化了 Flask-Babel 扩展? - plaes
3
谢谢,创建 'from flaskext.babel import Babel' 和 'babel = Babel(app)' 后它就可以工作了。 - Brent Jiang
你是救星。 - Jacquot
1
我需要{% trans with name=varFromContext %}你好{{ name }}{% endtrans %} - Chris
https://support.sendwithus.com/templating/translating_templates/ - Natim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接