#node.js #typescript #express #i18next
Вопрос:
Я включил 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'] });
Пути для моих файлов перевода верны и выглядят следующим образом:
локали/de/translation.json
{ "SignIn": "Anmelden", "Username": "Benutzername", "Password": "Passwort", "Login": "Anmelden" }
локали/ru/translation.json
{ "SignIn": "Sign in", "Username": "Username", "Password": "Password", "Login": "Login" }
При отрисовке шаблона ejs я передаю функцию t i18next в представление следующим образом
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)});
Как только я это сделаю, будет отображен резервный язык, если я изменю его на немецкий, немецкий также будет отображен.
Но язык не определяется автоматически
Ответ №1:
Похоже t
, что функция уже доступна для шаблонов через http-middleware
, без явной передачи объекта из серверной части.
Пока, кажется, все работает нормально.