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
用于模板,无需明确地从后端传递对象。
到目前为止,似乎一切正常。
我已经在我的 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
用于模板,无需明确地从后端传递对象。
到目前为止,似乎一切正常。