您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用Flask + Babel选择语言?

如何使用Flask + Babel选择语言?

这是我遇到的解决方案:

首先,您设置一条路由,该路由将处理语言更改并将所选语言存储在会话中:

@app.route('/language/<language>')
def set_language(language=None):
    session['language'] = language
    return redirect(url_for('index'))

其次,您必须修改一些代码才能从会话中获取所选语言:

@babel.localeselector
def get_locale():
    # if the user has set up the language manually it will be stored in the session,
    # so we use the locale from the user settings
    try:
        language = session['language']
    except KeyError:
        language = None
    if language is not None:
        return language
    return request.accept_languages.best_match(app.config['LANGUAGES'].keys())

您还必须能够从模板访问CURRENT_LANGUAGE,因此可以注入它:

@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 %}

应用程序config.py包含以下常量:

LANGUAGES = {
  'en': 'English',
  'es': 'Spanish'
}

希望这可以帮助!

Python 2022/1/1 18:34:51 有230人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶