我的场景是一个Node.js + Express +把手+ i18next应用程序。
我想在数据库配置键上设置默认语言。如果我决定默认语言应为X而不是Y,则只需对其进行更改并将该选择保存在应用程序的后端。问题是我不想每次更改默认语言时都重新加载整个应用程序,因此无法在i18next.init()
方法中执行此操作。在每次页面请求时,都应从数据库中读取默认语言,如果当前用户未做其他选择,则使用默认语言。我的想法如下,但它不起作用:
const express = require('express');
const i18next = require('i18next');
const app = express();
...
i18next.init(...);
...
app.use((req, res, next) => {
const lng = someLogicToDecideLanguage();
i18next.changeLanguage(lng, (err, t) => {
if (err) {
next(err);
}
console.log(i18next.language); // it's changed!
next();
});
});
如果我在i18next.language
回调结果中记录changeLanguage
,它似乎已更改,但是在呈现视图时,语言不会更改。
谢谢!
我发现了问题。我没有在正确的翻译器实例(i18next克隆的那个翻译器实例)上更改语言,该实例可在请求中使用并用于翻译。您必须将i18next.changeLanguage
更改为req.i18n.changeLanguage
:
app.use((req, res, next) => {
const lng = someLogicToDecideLanguage();
req.i18n.changeLanguage(lng, (err, t) => {
if (err) {
next(err);
}
console.log(i18next.language); // it's changed!
next();
});
});