You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-Babel中get_locale()函数不生效问题排查与解决

Flask-Babel get_locale()函数失效问题解决

问题说明

使用Flask 2.2.2和Flask-Babel 3.0.0配置多语言翻译,目标是将英文基础的HTML页面转为葡萄牙语,但遇到以下异常:

  • 修改get_locale()函数无法切换语言,函数逻辑完全被忽略
  • 手动修改app.config['BABEL_DEFAULT_LOCALE']时,能正常加载编译后的.mo翻译文件,说明翻译资源本身无问题
  • 使用@babel.localeselector装饰器时,系统提示未识别该装饰器

解决方案

问题根源在于代码初始化顺序错误,正确的执行顺序应为:

  1. 初始化Flask应用实例
  2. 配置Babel默认语言
  3. 初始化Babel对象
  4. 定义get_locale()语言选择函数
  5. 调用babel.init_app()并传入locale_selector=get_locale参数

修改后的完整代码如下:

from flask import Flask, render_template
from flask_babel import Babel
from flask_babel import gettext as _

app = Flask(__name__)

app.config['BABEL_DEFAULT_LOCALE'] = 'en'

# 初始化Babel对象
babel = Babel(app)

# 定义语言选择函数,可根据需求动态返回(如从请求参数、Cookie读取)
def get_locale():
    return 'en'

# 传入locale_selector重新初始化Babel
babel.init_app(app, locale_selector=get_locale)
  
@app.route('/')
def index():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True)

内容的提问来源于stack exchange,提问作者Danilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:53:00