我已经设置好 Flask-Babel 并在我的 localhost 开发应用程序上正常工作(使用两种语言:en_GB
和en_US
)。
但是,当我尝试在生产应用程序上切换语言时,它什么也没做。该get_locale()
函数正在返回正确的语言(我可以看到它在页面刷新时被多次调用,这表明它正在为每个所需的翻译调用),但没有出现实际的翻译。
正如我所说,它在开发应用程序中运行良好,我看不出为什么行为在生产中应该有任何不同。任何想法将不胜感激。
翻译文件 (messages.mo
和messages.po
) 存储在translations/en_us/LC_MESSAGES
.
配置文件
LANGUAGES = ['en_GB', 'en_US']
babel.cfg
[jinja2: megaseatingplan/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
__init__.py
# Initialise flask-babel
babel = Babel(app)
@babel.localeselector
def get_locale():
try:
print("Language loaded from current_user: "+str(current_user.language))
return current_user.language
except:
print("Language loaded from browser: "+str(request.accept_languages.best_match(app.config['LANGUAGES'])))
return request.accept_languages.best_match(app.config['LANGUAGES'])
手动选择语言的功能
@app.route('/switch_language/<language>')
@login_required
def switch_language(language):
current_user.language = language
db.session.commit()
track_event("User", "Switch language", label=language, value=0, userid=current_user.userid)
if language == "en_GB":
flash("Language switched to English (UK)")
elif language == "en_US":
flash("Language switched to English (US)")
return redirect(url_for('home'))
编辑:
一些额外的信息。我已经确认它BABEL_TRANSLATION_DIRECTORIES
指向了正确的位置,并且还list_translations()
用来确认它正在找到我的en_US
翻译文件。