Flask - 我如何始终在url中包含语言代码

Lua*_*yen 5 python internationalization flask

我开始使用Flask几周了,并且正在尝试将i18n和l10n应用到我的Flask应用程序中.这是我真正想要实现的行为:

用户输入website.com将被重定向到website.com/en/website.com/fr/取决于其设置中的Accept-Languages标头或默认语言.

这是我目前的实施:

# 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>')
Run Code Online (Sandbox Code Playgroud)

这样,当我打字website.com或者website.com/en/它会响应时website.com.除非我打字,website.com/fr否则会回复/fr/.但是,/en/即使它是默认选项,我也希望始终包含.


我在Flask doc中尝试了指南URL处理器模式,但是当我输入时website.com它响应了404 error.当我将其language_code包含在url中时它才能正常工作- 这不是我想要的行为.


先感谢您!

tbi*_*icr 5

看起来你只需要一个蓝图:

app.register_blueprint(mainBlueprint, url_defaults='/<lang>')
Run Code Online (Sandbox Code Playgroud)

但是你应该决定默认蓝图路线的行为:

  1. 它可以返回404:

    app.register_blueprint(mainBlueprint, url_defaults='/<lang>')
    
    Run Code Online (Sandbox Code Playgroud)
  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>')
    
    Run Code Online (Sandbox Code Playgroud)