Flask-Babel
この目的のために使用している 2 つの異なる言語でサイトを作成したいと考えています。
これが私のsettings.py構成です:
LANGUAGES = {
'en': 'English',
'ru': 'Russian'
}
ここでは、私のアプリで使用している 2 つの言語を含む辞書を見ることができます。
ここに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)
いいですね。
アプリケーションをそのまま実行しても何も変わらず、デフォルトの言語である英語が表示されますが、ロシア語に切り替えると機能しません。
どんな助けでも大歓迎です:)。