【发布时间】:2017-10-17 11:58:03
【问题描述】:
有没有人知道一个例子或者可以在这里解释 node.js 和 express 如何为多语言站点进行路由?我正在使用 i18n-node 进行翻译和文件夹,如路由( /es/、/de/ 等)用于不同语言。这都是静态路由,但我也有像 apiRoutes.route('/user/profile') 这样的路由,在开始时使用 'app' ( app.get('/app/user/ profile') 所以请在你的回答中考虑这一点,所以不是必要的途径:app.get('/es/app/user/profile')。
现在有 15 条这样的路线:
app.get('/terms', function(req, res) {
res.render('terms',{
...
});
});
如何为以下路线设置:
app.get('/es/terms', function(req, res) {
res.render('terms',{
...
});
});
-
我是否应该复制此路线并添加例如语言环境 每个喜欢:
app.get('/es/terms', function(req, res) { res.render('terms',{ ... }); }); -
或者应该这样做:
if cookie['lang'] && cookie['lang'] is in locales // then redirect to /:lang/terms else // show default language in /terms if req.headers["accept-language"] && req.headers["accept-language"] // then redirect to /:lang/terms else //show default language in /terms 或者我应该采用另一种方法来处理这个问题,它遵循良好的做法或更好地尊重标准?
米罗的回答: How can I get the browser language in node.js (express.js)? 说我应该使用 app.all('*', ...
这就是我所需要的吗?,..仍然,它可能有语法错误,或者我对这两部分不太理解
var rxLocal = /^\/(de|en)/i;
...
app.get(/\/(de|en)\/login/i, routes.login);
提前致谢
【问题讨论】:
-
通过 HTTP 管理 i18n 的常规方法是使用为此设计的标头 Accept-Language。否则,@patrick-hund 提议似乎是处理路线的最佳方式。您可以添加一个中间件来为您的所有路由执行一些通用过程。
-
“所有路由的通用流程”是什么意思......任何特定的中间件? @Techniv
-
用语言环境数据丰富
request或response对象,为渲染引擎设置语言环境数据等。参见app.use()