以 flask wtforms 形式切换标签语言
Toggle language of labels in flask wtforms form
我有一系列用烧瓶应用程序编写的 wtforms。我的应用程序中的一个页面将被说英语和西班牙语的人使用。我想找到一种干净的方法,通过网页上的切换按钮在英语和西班牙语之间切换表单元素标签。
我在这里找到了一个使用 HTML lang
属性切换语言的好方法(第 2 个答案,作者 J Grover):
这会将每种语言包含在一个 <span>
元素中,然后简单地隐藏我们不想看到的语言。
我的问题是我表单上的字段标签来自 wtforms 对象。我不确定如何在当前设置中包含多种语言。请参阅下面的示例,了解我现在所在的位置:
表格
class RoofCheck(FlaskForm):
"""
Class holding the form inputs for a roof check
"""
roofstate = RadioField('Roof Status',
validators=[validators.DataRequired('Please select roof closed or open')],
choices=[('closed', 'Closed'), ('open', 'Open')])
comments = TextAreaField('Comments on roof status',
[validators.optional(), validators.length(max=390)],
render_kw={"placeholder": "Enter comments here",
"rows": 4,
"style": "min-width: 100%"})
submit = SubmitField('Submit')
HTML
<div id='roof_check' class='col-md-6 padding-0'>
<form id="roof_check_form" action={{ url_for('roof_check')}} method="post" name="roof">
<fieldset class='form_group'>
{{ form1.hidden_tag() }}
<legend class='text-center'>
Daily visual check of the roof
</legend>
{% for subfield in form1.roofstate %}
<div class='form-check'>
{{ subfield }}
{{ subfield.label(class_="form-check-label") }} <br/>
</div>
{% endfor %}
<div class='form-check'>
{{ form1.comments }}
</div>
<div class='form-check'>
{% with messages = get_flashed_messages(category_filter=["form1"]) %}
{% if messages %}
{% for message in messages %}
<div> {{ message }} </div>
{% endfor %}
{% endif %}
{% endwith %}
{% for message in form1.roofstate.errors %}
<div> {{ message }} </div>
{% endfor %}
<div style="padding-top: 5px;">
{{ form1.submit(class_="btn btn-primary") }}
</div>
</div>
</fieldset>
</form>
</div>
我不确定从哪里开始向 RoofCheck class 表单对象添加多个标签。关于如何在此处插入对两种语言的支持的任何建议都很棒。提前致谢。
原来我可以直接在标签上加上html,把语言属性放在那里,然后用上面link中的javascript解决方案来切换语。例如:
roof_status_text = ("<span lang='en'>Roof Status</span>"
"<span lang='es'>Estado del Techo</span>")
open_text = ("<span lang='en'>Open</span>"
"<span lang='es'>Abierto</span>")
closed_text = ("<span lang='en'>Closed</span>"
"<span lang='es'>Cerrado</span>")
roofstate = RadioField(roof_status_text,
validators=[validators.DataRequired('Please select roof closed or open')],
choices=[('closed', closed_text),
('open', open_text)])
我有一系列用烧瓶应用程序编写的 wtforms。我的应用程序中的一个页面将被说英语和西班牙语的人使用。我想找到一种干净的方法,通过网页上的切换按钮在英语和西班牙语之间切换表单元素标签。
我在这里找到了一个使用 HTML lang
属性切换语言的好方法(第 2 个答案,作者 J Grover):
这会将每种语言包含在一个 <span>
元素中,然后简单地隐藏我们不想看到的语言。
我的问题是我表单上的字段标签来自 wtforms 对象。我不确定如何在当前设置中包含多种语言。请参阅下面的示例,了解我现在所在的位置:
表格
class RoofCheck(FlaskForm):
"""
Class holding the form inputs for a roof check
"""
roofstate = RadioField('Roof Status',
validators=[validators.DataRequired('Please select roof closed or open')],
choices=[('closed', 'Closed'), ('open', 'Open')])
comments = TextAreaField('Comments on roof status',
[validators.optional(), validators.length(max=390)],
render_kw={"placeholder": "Enter comments here",
"rows": 4,
"style": "min-width: 100%"})
submit = SubmitField('Submit')
HTML
<div id='roof_check' class='col-md-6 padding-0'>
<form id="roof_check_form" action={{ url_for('roof_check')}} method="post" name="roof">
<fieldset class='form_group'>
{{ form1.hidden_tag() }}
<legend class='text-center'>
Daily visual check of the roof
</legend>
{% for subfield in form1.roofstate %}
<div class='form-check'>
{{ subfield }}
{{ subfield.label(class_="form-check-label") }} <br/>
</div>
{% endfor %}
<div class='form-check'>
{{ form1.comments }}
</div>
<div class='form-check'>
{% with messages = get_flashed_messages(category_filter=["form1"]) %}
{% if messages %}
{% for message in messages %}
<div> {{ message }} </div>
{% endfor %}
{% endif %}
{% endwith %}
{% for message in form1.roofstate.errors %}
<div> {{ message }} </div>
{% endfor %}
<div style="padding-top: 5px;">
{{ form1.submit(class_="btn btn-primary") }}
</div>
</div>
</fieldset>
</form>
</div>
我不确定从哪里开始向 RoofCheck class 表单对象添加多个标签。关于如何在此处插入对两种语言的支持的任何建议都很棒。提前致谢。
原来我可以直接在标签上加上html,把语言属性放在那里,然后用上面link中的javascript解决方案来切换语。例如:
roof_status_text = ("<span lang='en'>Roof Status</span>"
"<span lang='es'>Estado del Techo</span>")
open_text = ("<span lang='en'>Open</span>"
"<span lang='es'>Abierto</span>")
closed_text = ("<span lang='en'>Closed</span>"
"<span lang='es'>Cerrado</span>")
roofstate = RadioField(roof_status_text,
validators=[validators.DataRequired('Please select roof closed or open')],
choices=[('closed', closed_text),
('open', open_text)])