【问题标题】:Flask + Flask-Security + Babel not workingFlask + Flask-Security + Babel 不工作
【发布时间】:2017-02-21 18:45:41
【问题描述】:

我已经设置了 Flask + Babel + Flask Security。 像这样创建所有翻译:

  • 根
    • main.py
    • 翻译
      • 汝
        • LC_MESSAGES
          • messages.mo
          • messages.po

在 main.py 中有部分设置语言执行:

@babel.localeselector
def get_locale():
    user = getattr(g, 'user', None)
    if user is not None:
        print("User locale {}".format(user.locale))
        return user.locale
    # I put here constant to test
    return 'ru'

但是http://localhost/login 没有被翻译。你能建议在哪里挖吗?即使使用 Debug = True

,日志中也没有错误

【问题讨论】:

  • 我发现翻译适用于 templates/ 中的模板,但不适用于 templates/security/

标签: python flask flask-security python-babel flask-babel


【解决方案1】:

我发现 Flask-Security 不适用于开箱即用的 Babel! This Pull Request fixes it partially 从 WTF 处理的角度来看。 为了能够翻译 Jinja2 模板以及以下需要在 core.py

中进行修改
def render_template(self, *args, **kwargs):
    # Provide i18n support even if flask-babel is not installed
    # or enabled.
    kwargs['gettext'] = gettext
    kwargs['ngettext'] = ngettext
    kwargs['_'] = _
    return render_template(*args, **kwargs)

【讨论】:

    【解决方案2】:

    FWIW,我只需将导入更改为

    from flask_babelex import Babel, gettext, lazy_gettext
    

    使用 Flask-Security 使其一切正常。

    【讨论】:

      【解决方案3】:

      您应该告诉您的应用您使用特定的语言环境。我是这样做的:

      from flask import Flask
      from flask_sqlalchemy import SQLAlchemy
      from flask_security import Security, SQLAlchemyUserDatastore
      from .models import User, Role, 
      from flask_babel import Babel
      
      app = Flask(__name__)
      db = SQLAlchemy(app)
      
      user_datastore = SQLAlchemyUserDatastore(db, User, Role)
      security = Security(app, user_datastore)
      
      babel = Babel(app, 'ru')
      

      【讨论】:

        猜你喜欢
        • 2016-04-22
        • 2021-10-02
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        相关资源
        最近更新 更多