2

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

    • 主文件
    • 翻译
        • LC_MESSAGES
          • 消息.mo
          • 消息.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,日志中也没有错误

4

3 回答 3

2

我发现Flask-Security不适用于开箱即用的 Babel! 这个拉取请求从 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)
于 2017-02-24T13:28:21.400 回答
1

FWIW,我只需将导入更改为

from flask_babelex import Babel, gettext, lazy_gettext

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

于 2019-03-28T09:46:33.980 回答
1

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

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')
于 2019-10-12T15:09:56.067 回答