Ich erstelle eine mehrsprachige Site (EN und FR) und brauche sie, um beim Klicken hin- und herzuwechseln, wenn der Benutzer dies wünscht. Ich benutze Flask-Babel und die Übersetzungen und Toggle funktionieren beim Klick korrekt, allerdings müssen auch die URLs übersetzt werden. Ich habe zur Zeit meine URL Routen wie so eingewickelt, sowohl mit dem Englisch und Französisch URLs:Flask-Babel Mehrsprachiges URL-Routing
@main.route('/accueil')
@main.route('/home')
def index():
return render('index.html', {})
@main.route('/a-propos-de-nous')
@main.route('/about-us')
def about():
return render('about.html', {})
Der Rest des Codes, der die Sprache und die Hin- und Herschalten ist grabbing sich wie folgt:
app = Flask(__name__, static_folder=settings.STATIC_ROOT)
main = Blueprint('main', __name__, url_prefix='/language/<lang_code>')
@app.url_defaults
def set_language_code(endpoint, values):
if 'lang_code' in values or not session['lang_code']:
return
if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
values['lang_code'] = session['lang_code']
@app.url_value_preprocessor
def get_lang_code(endpoint, values):
if values is not None:
session['lang_code'] = values.pop('lang_code', None)
@app.before_request
def ensure_lang_support():
lang_code = session['lang_code']
if lang_code and lang_code not in app.config['SUPPORTED_LANGUAGES'].keys():
return abort(404)
@babel.localeselector
def get_locale():
if session.get('lang_code') is None:
session['lang_code'] = request.accept_languages.best_match(app.config['SUPPORTED_LANGUAGES'].keys())
return session['lang_code']
Die Vorlage das sieht aus wie, wo der Benutzer klickt auf dem Link Sprachen zu ändern:
{% if session['lang_code']=='en' %}
{% set new_lang_code='fr' %}
{% else %}
{% set new_lang_code='en' %}
{% endif %}
<li><a href="{{ request.path|replace("/"+session['lang_code']+"/", "/"+new_lang_code+"/") }}">{{ _('Fr') }}</a></li>
wie ich wenig Erfahrung mit Python/Flask habe ... ich mit dem besten Weg zum übersetzte UR wechseln habe Schwierigkeiten L. Wie würde ich das machen? Jede Information würde geschätzt werden. Danke im Voraus.