2016-06-13 83 views
1

我正在創建一個多語言站點(EN和FR),如果用戶選擇,我需要它來回切換點擊。我使用Flask-Babel,翻譯和切換在點擊上正常工作,但是,我也需要翻譯網址。我已經目前包裹着我的URL路徑,像這樣,用英文和法文網址:Flask-Babel多語言URL路由

@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', {}) 

被抓住了語言和撥動其餘代碼如下:

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'] 

模板像這樣在鏈接用戶點擊更改語言:

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

正如我有使用Python /瓶一點經驗...我用最好的方式艱難地切換到翻譯UR L.我會如何去做這件事?任何信息,將不勝感激。提前致謝。

回答

0

我找到了解決方案!我不得不端點添加到URL路徑,像這樣:

@main.route('accueil', endpoint="index_fr") 
@main.route('home', endpoint="index_en") 
def index(): 
    return render('index.html', {}) 

@main.route('a-propos-de-nous', endpoint="about_fr") 
@main.route('about-us', endpoint="about_en") 
def about(): 
    return render('about.html', {}) 

這讓我用巴貝爾翻譯的URL端點就像它的文本的其餘部分,並抓住了正確的URL與語言一起結束來自會話的代碼。現在切換工作如下:

{% if session['lang_code']=='en' %} 
    {% set new_lang_code='fr' %} 
{% else %} 
    {% set new_lang_code='en' %} 
{% endif %} 

<li><a href="{{ url_for(request.endpoint|replace("_"+session['lang_code'], "_"+new_lang_code))|replace("/"+session['lang_code']+"/", "/"+new_lang_code+"/") }}">{{ _('Fr') }}</a></li>