i18next 翻译未在 EJS 中呈现

i18next translation is not rendered in EJS

我已经在我的 Express 应用程序中包含了 i18next 并配置如下:


const i18next = require('i18next');
const Backend = require('i18next-fs-backend');
const i18nextMiddleware = require('i18next-http-middleware');

i18next
    .use(Backend)
    .use(i18nextMiddleware.LanguageDetector)
    .init({
        backend: {
            loadPath: __dirname + '/locales/{{lng}}/{{ns}}.json'
        },
        fallbackLng: 'en',
        preload: ['en', 'de']
    });

我的翻译文件的路径是正确的,看起来像这样:

locales/de/translation.json

{
  "SignIn": "Anmelden",
  "Username": "Benutzername",
  "Password": "Passwort",
  "Login": "Anmelden"
}

locales/en/translation.json

{
  "SignIn": "Sign in",
  "Username": "Username",
  "Password": "Password",
  "Login": "Login"
}

在渲染ejs模板的时候,我是这样把i18next的t函数传给view的

res.render("index",{t:i18next.t});

在模板中,我使用如下值:

<h2 class="ui center aligned header"><%= t("SignIn") %></h2>

结果是什么都没有显示,既没有后备语言也没有德语,因为我的浏览器是德语,语言检测器应该检测到。

我读到你必须重新绑定 t 函数才能使其在视图中工作,我也试过了,就像这样:

res.render("index", {t: i18next.t.bind(i18next.t)});

一旦我这样做,就会呈现后备语言,如果我将其更改为德语,也会呈现德语。

但是没有自动检测语言

看起来 t 函数已经可以通过 http-middleware 用于模板,无需明确地从后端传递对象。

到目前为止,似乎一切正常。