перевод i18next не отображается в EJS

#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 , без явной передачи объекта из серверной части.

Пока, кажется, все работает нормально.