keystone.js アプリに i18n を含めようとしています。私はこの例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
したがって、私が理解しているように、変数がビューに送信された後にロケールが変更されます。レンダリングする前に設定する方法はありますか? 各ビューのurl param から req.params で取得できることはわかっていlang
ますが、すべてのビューでミドルウェアで取得したいと考えています。