Flask-Babel localeselector 没有被调用
Flask-Babel localeselector is not being called
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 无法找到翻译文件夹,我不确定如何解决这个问题。
解决了,原来我得把localeselector移出工厂。由于我的大部分文本字段都是在服务端生成的,而不是 forntend,因此我还必须在所有这些字段上使用 lazy_text,因为它们是由端点调用的,而不是在端点中定义的。
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 无法找到翻译文件夹,我不确定如何解决这个问题。
解决了,原来我得把localeselector移出工厂。由于我的大部分文本字段都是在服务端生成的,而不是 forntend,因此我还必须在所有这些字段上使用 lazy_text,因为它们是由端点调用的,而不是在端点中定义的。