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中时它才能正常工作- 这不是我想要的行为.
先感谢您!
看起来你只需要一个蓝图:
app.register_blueprint(mainBlueprint, url_defaults='/<lang>')
Run Code Online (Sandbox Code Playgroud)
但是你应该决定默认蓝图路线的行为:
它可以返回404:
app.register_blueprint(mainBlueprint, url_defaults='/<lang>')
Run Code Online (Sandbox Code Playgroud)它可以重定向到/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)