我遇到了一个愚蠢的问题: 如何使用可选语言环境参数?
这就是我的意思:
例如,我有首页和联系人,这是路线:
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
答案 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,后来的逻辑将不知道有语言参数。