Node.js + Express + i18next如何从数据库加载语言

问题描述 投票:0回答:1

我的场景是一个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,它似乎已更改,但是在呈现视图时,语言不会更改。

谢谢!

node.js database express configuration i18next
1个回答
0
投票

我发现了问题。我没有在正确的翻译器实例(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();
        });
    });
© www.soinside.com 2019 - 2024. All rights reserved.