2017-02-22 40 views
1

Теперь я разрабатываю проект, который должен поддерживать два языка: английский, по умолчанию и русский. Это довольно легко сделать, используя HTTP_ACCEPT_LANGUAGE заголовок, код ниже:Как я могу выбрать язык, используя Flask + Babel?

babel = Babel(app) 

@babel.localeselector 
def get_locale(): 
    return request.accept_languages.best_match(app.config["LANGUAGES"].keys()) 

языки зашиты в конфигурационном файле приложения:

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

Но я также хочу, чтобы добавить кнопку, как Switch language to English. Какова наилучшая практика для его реализации?

ответ

3

Это решение, которое я наткнулся:

Сначала вы установили маршрут, который будет обрабатывать изменения языка и будет хранить выбранный язык на сессии:

@app.route('/language/<language>') 
def set_language(language=None): 
    session['language'] = language 
    return redirect(url_for('index')) 

Во-вторых, вы должны изменить немного код, который вы должны получить выбранный язык сессии:

@babel.localeselector 
def get_locale(): 
    # if the user has set up the language manually it will be stored in the session, 
    # so we use the locale from the user settings 
    try: 
     language = session['language'] 
    except KeyError: 
     language = None 
    if language is not None: 
     return language 
    return request.accept_languages.best_match(app.config['LANGUAGES'].keys()) 

вы должны также быть в состоянии получить доступ к CURRENT_LANGUAGE из шаблонов, s О, вы можете придать ей:

@app.context_processor 
    def inject_conf_var(): 
     return dict(
        CURRENT_LANGUAGE=session.get('language', 
               request.accept_languages.best_match(app.config['LANGUAGES'].keys()))) 

Наконец, на шаблоне вы можете выбрать язык, который вы хотите:

{% for language in AVAILABLE_LANGUAGES.items() %} 
    {% if CURRENT_LANGUAGE == language[0] %} 
     {{ language[1] }} 
    {% else %} 
     <a href="{{ url_for('set_language', language=language[0]) }}" >{{ language[1] }}</a> 
    {% endif %} 
{% endfor %} 

Надеется, что это помогает!

 Смежные вопросы

  • Нет связанных вопросов^_^