我正在尝试将 i18n 包含在 keystone.js 应用程序中。我正在这样做,就像在这个例子https://gist.github.com/JedWatson/9191081中一样,它可以工作,但我的问题是要查看当前的语言环境。我正在使用中间件通过 url 参数设置语言环境:
// middleware.js
exports.setLocale = function (req, res, next) {
if (req.params.lang) {
req.setLocale(req.params.lang);
}
else
res.redirect('/ru/');
next();
};
// index.js
keystone.pre('render', middleware.setLocale);
和路由
app.get('/:lang/', routes.views.index);
app.get('/:lang/blog/:category?', routes.views.blog);
app.get('/:lang/blog/post/:post', routes.views.post);
...
默认语言环境是“ru”。但在我看来
view.on('render', function (next) {
console.log('on render', req.getLocale());
next();
});
console.log('before render', req.getLocale());
view.render('blog');
/en/blog
在它输出的路线上
------------------------------------------------
KeystoneJS Started:
qalqan is ready on default port 3000
------------------------------------------------
before render ru
on render en
GET /en/blog 304 373ms
因此,据我了解,在将变量发送到视图后会更改语言环境。在渲染之前有什么方法可以设置它吗?我知道,我可以通过 req.params 从lang
每个视图中的 url 参数中获取它,但我想通过中间件为所有视图执行此操作。