【问题标题】:How to get optional language parameter from URL in Express routes?如何从 Express 路由中的 URL 获取可选语言参数?
【发布时间】:2014-05-17 23:02:59
【问题描述】:

我遇到了一个愚蠢的问题: 如何使用可选语言环境参数?

这就是我的意思:

例如,我有首页联系人,这里是路线:

app.get('/', frontpage.get);
app.get('/contacts', contacts.get);

现在我正在尝试将本地化添加到我的网站

app.all('/:lang?*', language.all); -> detect and set locale
app.get('/:lang?', frontpage.get);
app.get('/:lang?/contacts', contacts.get);

唯一的问题是当我不在 URL 中使用语言参数时:

mysite.com/contacts

因为 Express 使用 'contacts' 作为语言参数。 (+ 我不喜欢这种复制粘贴的:lang?)

我想,我只是走错路了。

如何在 Express 中使用 URL 中的 locale 参数?

PS:我不想使用子域de.mysite.com 或查询字符串mysite.com?lang=de。我想要这个变种mysite.com/de

【问题讨论】:

    标签: node.js express localization routing routes


    【解决方案1】:

    大多数模块都使用Accept-Language,所以我找不到任何使用您可能可以使用的路径的模块。因此,您需要定义自己的中间件,该中间件在其他一切之前初始化。 Express 的 Router 对您的用例并没有真正的帮助。

    app.use(function(req, res, next){
        var match = req.url.match(/^\/([A-Z]{2})([\/\?].*)?$/i);
        if (match){
            req.lang = match[1];
            req.url = match[2] || '/';
        }
        next();
    });
    

    现在您可以在路由或其他中间件中使用req.lang 来配置您的翻译逻辑,并且由于我们已经重写了 URL,以后的逻辑将不知道有语言参数。

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2015-12-20
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多