jinja 宏中的 flask babel
flask babel in a jinja macro
我认为我的模板中的 babel 翻译工作正常,适用于像这样的简单字符串:
<label class="control-label">{{_('Start')}}</label>
根据我的翻译很好 messages.po
但现在在我的表单中,我大部分时间都想使用这个宏:
{% macro render_field_with_errors(field) %}
<div class="form-group">
{{ field.label }} {{ field(class_='form-control', **kwargs)|safe }}
{% if field.errors %}
<ul>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endmacro %}
而且我很乐意 {{ field.label }}
翻译
所以我改变了我的形式 class 添加 getttext() 如下所示,更新我的 messages.pot,翻译 messages.po,删除模糊,编译。
class ProfileForm(Form):
location = StringField(gettext('location'), validators=[DataRequired()])
password = PasswordField(gettext('password'), validators=[DataRequired()])
unit = SelectField(gettext('unit'), coerce=int, choices=[(1, 'kilometers / meters'), (2, 'miles / feet')])
submit = SubmitField(gettext('Update'))
不幸的是,字段未翻译,页面中的其余部分已翻译。我错过了什么吗?显然是的!
那么解决方案是在 class ProfileForm(Form):
中使用 lazy_gettext
而不是 gettext
我认为我的模板中的 babel 翻译工作正常,适用于像这样的简单字符串:
<label class="control-label">{{_('Start')}}</label>
根据我的翻译很好 messages.po
但现在在我的表单中,我大部分时间都想使用这个宏:
{% macro render_field_with_errors(field) %}
<div class="form-group">
{{ field.label }} {{ field(class_='form-control', **kwargs)|safe }}
{% if field.errors %}
<ul>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endmacro %}
而且我很乐意 {{ field.label }}
翻译
所以我改变了我的形式 class 添加 getttext() 如下所示,更新我的 messages.pot,翻译 messages.po,删除模糊,编译。
class ProfileForm(Form):
location = StringField(gettext('location'), validators=[DataRequired()])
password = PasswordField(gettext('password'), validators=[DataRequired()])
unit = SelectField(gettext('unit'), coerce=int, choices=[(1, 'kilometers / meters'), (2, 'miles / feet')])
submit = SubmitField(gettext('Update'))
不幸的是,字段未翻译,页面中的其余部分已翻译。我错过了什么吗?显然是的!
那么解决方案是在 class ProfileForm(Form):
lazy_gettext
而不是 gettext