【问题标题】:Flask-Babel localeselector is not being calledFlask-Babel localeselector 没有被调用
【发布时间】:2019-12-27 20:35:51
【问题描述】:

Flask-babel 甚至不会调用它的 localeselector 一次。我正在使用应用程序工厂来初始化我的应用程序。根据文档,翻译文件夹在我的应用程序中,它是由 babel 创建的。我还尝试将翻译目录移动到包含调用工厂的 run.py 的文件夹,但没有效果。

from flask import Flask, session, request
from myapp.text_fields import next_month
from myapp.config import Config
from flask_babel import Babel

babel = Babel()


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)

    babel.init_app(app)

    from myapp.views import user
    from myapp.errors import errors

    app.register_blueprint(user)
    app.register_blueprint(errors)

    @babel.localeselector
    def get_locale():
        try:
            language = session['language']
        except KeyError:
            language = None
        if language is not None:
            return language
        return request.accept_languages.best_match(app.config['LANGUAGES'])

    @app.context_processor
    def inject_conf_var():
        return dict(
            MONTH=next_month(),
            AVAILABLE_LANGUAGES=app.config['LANGUAGES'],
            CURRENT_LANGUAGE=session.get('language',
                                         request.accept_languages.best_match(app.config['LANGUAGES'])))

    return app

这是关于 babel 的配置部分:

BABEL_DEFAULT_LOCALE = 'pl'
LANGUAGES = ['pl', 'ua', 'ru', 'en']

到目前为止,我只遵守 EN,尝试更改默认值,但它也没有做任何事情。好像 babel 找不到翻译文件夹,我不知道如何解决这个问题。

【问题讨论】:

    标签: python flask multilingual python-babel flask-babel


    【解决方案1】:

    解决了,结果我不得不将 localeselector 移出工厂。由于我的大部分文本字段是在服务端而不是 forntend 生成的,因此我还必须在所有这些字段上使用lazy_text,因为它们是由端点调用而不是在它们中定义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2020-11-23
      • 2020-06-01
      • 2019-10-18
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多