2017-02-22 7 views
1

Jetzt entwickle ich ein Projekt, das zwei Sprachen unterstützen soll: Englisch als Standard und Russisch. Es ist ziemlich einfach zu tun, mit HTTP_ACCEPT_LANGUAGE Header, ist der Code unten:Wie kann ich die Sprache mit Flask + Babel wählen?

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

Aber ich mag auch eine Schaltfläche hinzufügen, wie Switch language to English:

babel = Babel(app) 

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

Sprachen in Anwendungskonfigurationsdatei fest einprogrammiert werden. Was ist die beste Vorgehensweise, um es zu realisieren?

Antwort

3

Dies ist die Lösung, die ich zufällig stieß:

Zuerst Sie eine Route festgelegt, dass die Änderung der Sprache wird handhaben und wird die ausgewählte Sprache auf der Sitzung speichern:

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

, haben Sie zu ändern ein wenig der Code müssen Sie die gewählte Sprache aus der Sitzung erhalten:

@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()) 

Sie auch die Current_Language aus den Vorlagen in der Lage sein müssen, um Zugang, s o Sie können es injizieren:

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

schließlich auf der Vorlage Sie die Sprache wählen, die Sie wünschen:

{% 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 %} 

hoffe, das hilft!

Verwandte Themen