【问题标题】:Flask - how can I always include language code in urlFlask - 我如何始终在 url 中包含语言代码
【发布时间】:2014-09-21 17:08:23
【问题描述】:

我开始使用 Flask 几个星期,并尝试在我的 Flask 应用程序中实现 i18n 和 l10n。 这是我真正想要实现的行为:

用户输入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>')

这样,当我输入website.comwebsite.com/en/ 时,它只会回复website.com。除非我输入website.com/fr,否则它会回复/fr/。但是,我希望始终包含 /en/,即使它是默认选项。


我已经尝试过 Flask 文档中的指南 URL Processors pattern,但是当我输入 website.com 时,它回复为 404 error。只有当我将 language_code 包含到 url 中时它才能正常工作——这不是我想要的行为。


提前谢谢你!

【问题讨论】:

  • @tbicr:我也阅读了您的问题和答案,并且尝试了所有这些。问题是我想始终在网址中包含/en//fr/。目前我只能包含其他语言代码,但不能包含 en :(
  • 看起来你只需要app.register_blueprint(mainBlueprint, url_defaults='/&lt;lang&gt;')。如果需要,您始终可以使用默认蓝图重定向到 en,例如,在 before_request 中作为默认蓝图。
  • 我怎样才能给你投票@tbicr? :D 非常感谢!!!

标签: python internationalization flask


【解决方案1】:

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

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

【讨论】:

  • this before request 总是重定向到 en ?当用户访问时,我需要重定向到当前页面。例如,当访问者在 /en/about 并更改语言时,他必须在 /ka/about 这可能吗?
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2016-03-03
  • 2013-05-16
  • 2017-05-16
  • 2015-10-08
相关资源
最近更新 更多