【问题标题】:How to change language of flask babel on a button click?如何在单击按钮时更改烧瓶 babel 的语言?
【发布时间】:2020-04-09 11:39:57
【问题描述】:
我有 Flask 中的函数,它以英文返回网站。此外,我希望能够通过 html 按钮在网站上使用德语。如何通过按钮将语言从英语更改为德语,从德语更改为英语?另外,是否可以只在调用时使用函数get_locale,而不是自动运行?
@babel.localeselector
def get_locale():
return 'en'
【问题讨论】:
标签:
python
flask
translation
python-babel
flask-babel
【解决方案1】:
首先你需要将地址存储在主应用文件中:
@app.route('/language=<language>')
def set_language(language=None):
session['language'] = language
return redirect(url_for('home'))
您需要在主应用程序文件中更改为 get_locale 函数的相同地址:
@babel.localeselector
def get_locale():
if request.args.get('language'):
session['language'] = request.args.get('language')
return session.get('language', 'en')
从模板访问当前语言:
app.config['LANGUAGES'] = {
'en': 'English',
'ge': 'German',
}
app.secret_key = "super secret key"
@app.context_processor
def inject_conf_var():
return dict(AVAILABLE_LANGUAGES=app.config['LANGUAGES'], CURRENT_LANGUAGE=session.get('language', request.accept_languages.best_match(app.config['LANGUAGES'].keys())))
这里是模板文件:
{% for language in AVAILABLE_LANGUAGES.items() %}
{% if CURRENT_LANGUAGE == language[0] %}
{{ language[1] }}
{% else %}
<a href="{{ url_for('set_language', language=language[0]) }}" >{{ language[1] }}</a>
{% endif %}
{% endfor %}