如何在Flask中切换两种语言?

时间:2016-07-31 20:03:27

标签: python flask babel

我想用两种不同的语言制作我的网站,为此目的使用Flask-Babel

以下是我的 settings.py 配置:

LANGUAGES = {
    'en': 'English',
    'ru': 'Russian'
}

在这里,您可以看到包含我在我的应用中使用的两种语言的字典。

这是 views.py

from settings import LANGUAGES

@app.before_request
@babel.localeselector
def before_request():
    if request.view_args and 'lang' in request.view_args:
        g.current_lang = request.view_args['lang']
        request.view_args.pop('lang')

@app.context_processor
def inject_url_for():
    return {
        'url_for': lambda endpoint, **kwargs: flask_url_for(
        endpoint, lang=g.current_lang, **kwargs
        )
    }
url_for = inject_url_for()['url_for']

inject_url_for函数意味着需要修改应用程序中的所有url_for()调用 要传递一个名为lang的额外参数,这就是我所做的,这里是索引函数:

@app.route('/<lang>/')
def index(page=1):

    user = User.query.filter_by(username='Reznov').first_or_404()
    blogs = Blog.query.count()
    blog_data = Blog.query.first()
    blog = Blog.query.first()
    posts = Post.query.filter_by(live=True).order_by(Post.publish_date.desc()).paginate(page, app.config['POSTS_PER_PAGE'], False)
    scshot = ScreenShot.query.filter_by(live=True).order_by(ScreenShot.publish_date.desc()).limit(4)
    post = Post.query.first()

    context = {
        'user': user,
        'blogs': blogs,
        'blog_data':blog_data,
        'blog':blog,
        'posts':posts,
        'scshot':scshot,
        'post':post
    }

    return render_template('blog/index.html', **context)

听起来不错?

现在,如果我按原样运行应用程序,没有任何变化,它只是给我一个英语的默认语言,但如果我将它切换为俄语则不会工作。

请非常感谢任何帮助:)。

0 个答案:

没有答案