2014-09-21 57 views
3

我開始使用燒瓶幾個星期,並試圖實現i18n和l10n到我的燒瓶應用程序。 這是我真正想要實現的行爲:燒瓶 - 我怎麼總是在url中包含語言代碼

用戶輸入website.com將被重定向到website.com/en/website.com/fr/取決於其設置的接受語言頭或默認語言。

這是我目前實施:

# main_blueprint.py 
mainBlueprint = Blueprint('main', __name__) 

@mainBlueprint.route('/') 
def index(lang): 
    return "lang: %" % lang 


# application.py 
app.register_blueprint(mainBlueprint, url_defaults={'lang': 'en'}) 
app.register_blueprint(mainBlueprint, url_prefix='/<lang>') 

這樣一來,當我輸入website.comwebsite.com/en/將只website.com迴應。除非我輸入website.com/fr,否則會回覆/fr/。但是,即使它是默認選項,我也希望始終包含/en/


我曾嘗試在瓶DOC引導URL Processors pattern,但是當我輸入website.com404 error迴應。只有當我將language_code包含到url中時,它才能正常工作 - 這不是我想要的行爲。


預先感謝您!

+0

可能重複http://stackoverflow.com/questions/14686087/python-flask-web-application-with-multilanguages-support - by-host-and-prefix) – tbicr 2014-09-21 20:21:15

+0

@tbicr:我也讀過你的問題和答案,並嘗試過所有的答案。問題是我總是在URL中包含'/ en /'或'/ fr /'。目前,我只能包含其他語言代碼,但不包括'en' :( – 2014-09-22 03:10:42

+2

)看起來你只需要'app.register_blueprint(mainBlueprint,url_defaults ='/ ')'。如果需要,你總是可以用默認藍圖重定向到en,例如,在'before_request'中爲你的默認藍圖。 – tbicr 2014-09-22 06:46:09

回答

2

看起來像你只需要一個藍圖:

app.register_blueprint(mainBlueprint, url_defaults='/<lang>') 

但是,你應該決定默認藍圖路由的行爲:

  1. 它可以返回404:

    app.register_blueprint(mainBlueprint, url_defaults='/<lang>') 
    
  2. 它可以重定向到/en藍圖:

    @mainBlueprint.before_request 
    def x(*args, **kwargs): 
        if not request.view_args.get('lang'): 
         return redirect('/en' + request.full_path) 
    
    app.register_blueprint(mainBlueprint, url_defaults={'lang': None}) 
    app.register_blueprint(mainBlueprint, url_prefix='/<lang>') 
    
([與MULTILANGUAGES支持由主機和前綴的Python燒瓶web應用]的