【问题标题】:Flask Babel doesn't work烧瓶巴别塔不起作用
【发布时间】:2015-05-11 15:04:28
【问题描述】:

我使用 Flask Babel 为烧瓶管理项目做 I18N。但即使使用简单的模板也无法使其工作。 代码如下,先初始化babel,

app=Flask(__name__,template_folder='templates')
app.config.from_object('config')
csrf=CsrfProtect(app)
bcrypt=Bcrypt(app)
db=SQLAlchemy(app)
babel=Babel(app) 
@babel.localeselector
def get_locale():
    return 'zh_Hans_CN'

添加构建管理页面并添加I18N,我也尝试了lazy_gettext()。不行。

# Create admin
admin = admin.Admin(app, 'iInvest:', index_view=MyAdminIndexView(), base_template='my_master.html')  
# Add view 
admin.add_view(UserManageView(User, db.session, gettext(u'User Management'))) 

使用babel获取I18N并添加翻译,

os.system(pybabel + ' extract -F babel.cfg -k lazy_gettext -o messages.pot iInvest/')
os.system(pybabel + ' init -i messages.pot -d translations -l zh_Hans_CN')
os.unlink('messages.pot')

它找到所有文本并手动添加翻译,然后编译它,

os.system(pybabel + ' compile -f -d translations')

重新启动服务器并检查页面,没有任何翻译。我尝试了其他语言,它们都不起作用。可能的原因是什么? 这是完整代码https://github.com/XiaokunHou/FlaskProject

【问题讨论】:

  • 如果手动运行pybabel命令,是否有错误/警告信息?
  • @1.618 没有错误,一切正常。
  • @1.618 因为我的翻译位置不对...

标签: python flask python-babel flask-babel


【解决方案1】:

我发现我错了。翻译文件夹在错误的位置。它应该在 iInvest 下(在其他情况下是应用程序).​​.

pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot iInvest/
pybabel init -i messages.pot -d iInvest/translations -l zh_Hans_CN
pybabel compile -f -d iInvest/translations

【讨论】:

  • 谢谢 dudu,你救了我的命:我在 pybabel init 中使用 zh_CN 而不是 zh_Hans_CN,并在装饰的 get_locale 函数中返回 zh_CN。结果是所有lazy_gettext 都失败(即显示原始文本而不是翻译文本),而所有gettext 都有效。 Flask Babel(和/或 Babel 本身)真的很奇怪......
猜你喜欢
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2016-09-02
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多