我想用两种不同的语言制作我的网站,为此目的使用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)
听起来不错?
现在,如果我按原样运行应用程序,没有任何变化,它只是给我一个英语的默认语言,但如果我将它切换为俄语则不会工作。
请非常感谢任何帮助:)。