我想用两种不同的语言制作我的网站,我正在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 的额外参数,而这正是我所做的,这里是index函数:
@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)
听起来不错吧?
现在,如果我按原样运行应用程序,没有任何变化,它只是给了我默认语言,即英语,但如果我将其切换为俄语,它将不起作用。
请任何帮助将不胜感激:)。