express.js - 使用 express-session 时如何使用 i18next 正确更改语言?

express.js - How to correctly change language with i18next when using express-session?

我不想在 url 中包含与语言相关的参数,所以我决定使用 express-session 更改当前语言。

通过阅读文档(可能有误解)对快速会话进行标准配置以进行概念验证后,我有一个端点,如:

app.get('myRoute', function(req, res) {
  req.i18n.changeLanguage('en'); // will not load that!!! assert it was preloaded
});

正如您在评论中所读到的(来自文档)"will not load"
然后我想出了这段对我有用的代码:

router.get('/chz', function(req, res){
 if(req.session){
  req.session.lng = 'zh-TW';
 }
 res.redirect('back');
});

此代码是否存在任何潜在问题(软优化或安全性等),我必须以某种方式使用 i18n.changeLanguage() 来更改使用 express-session 时的语言?如果不是,那么i18n.changeLanguage()的用法是什么?

只需使用 i18next-express-middleware 附带的语言检测器即可:https://github.com/i18next/i18next-express-middleware#detector-options

如果在订单选项中启用它,它已经在每个请求中从 req.session.lng 获取 lng:

{
  // order and from where user language should be detected
  order: [/*'path'*/, 'session',  'querystring', 'cookie', 'header'],
  // ...