【问题标题】:i18next translation is not rendered in EJSi18next 翻译未在 EJS 中呈现
【发布时间】:2021-12-02 07:29:14
【问题描述】:

我已在我的 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函数传给视图的

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)});

我这样做后,会立即呈现备用语言,如果我将其更改为德语,也会呈现德语。

但是没有自动检测到语言

【问题讨论】:

    标签: node.js typescript express i18next


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 2021-10-05
      • 2020-11-12
      • 1970-01-01
      • 2012-10-27
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多