如何从Express路由中的URL获取可选语言参数?

时间:2014-04-05 15:43:58

标签: node.js express localization routing routes

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

这就是我的意思:

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

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中不使用lang-parameter:

mysite.com/contacts

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

我想,我只是采取了错误的方式。

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

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

1 个答案:

答案 0 :(得分:10)

大多数模块都使用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,后来的逻辑将不知道有语言参数。