1

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)

いいですね。

アプリケーションをそのまま実行しても何も変わらず、デフォルトの言語である英語が表示されますが、ロシア語に切り替えると機能しません。

どんな助けでも大歓迎です:)。

4

0 に答える 0