i18next с i18next-node-fs-backend показывает ключ вместо строки - PullRequest
0 голосов
/ 24 марта 2020

В моем файле кода translations.ts у меня есть:

import i18next from 'i18next';
import Backend from 'i18next-node-fs-backend';
import path from 'path';

i18next.use(Backend).init({
    lng: "en",
    fallbackLng: "en",
    backend: {
        loadPath: path.join(__dirname, '/translations/{{lng}}_{{ns}}.json')
    }
});

export default i18next;

Затем в моем файле main.ts у меня есть:

import { dialog ] from 'electron;
import i18next from './translations';

// If something particular happens I want to show a dialog, like so:
dialog.showErrorBox(i18next.t('error.error'), i18next.t('error.text'));

В диалоговом окне отображается, но текст он отображает буквально «error.error» и «error.text» вместо строк из файла en_translation.json.

Я не получаю сообщения об ошибке. Мне кажется, что я не загружаю i18next (или модуль backend0 правильно, но я не уверен, что делаю неправильно. Я смотрел на другие подобные вопросы о переполнении стека, но ни один из этих вопросов или ответов не помог выпуск.

1 Ответ

0 голосов
/ 25 марта 2020

i18next имеет концепцию namespace, которая позволяет разбить приложение на «области» переводов.

Вам необходимо указать пространство имен по умолчанию, в противном случае его необходимо указать как часть ключ (i18next.t('translation:error.error')).

import i18next from 'i18next';
import Backend from 'i18next-node-fs-backend';
import path from 'path';

i18next.use(Backend).init({
  lng: 'en',
  fallbackLng: 'en',
  defaultNS: 'translation', // <---- this is your default NS
  backend: {
    loadPath: path.join(__dirname, '/translations/{{lng}}_{{ns}}.json'),
  },
});

export default i18next;
...