react-i18next, добавить ресурсы из props

У меня есть репо с компонентами и репо с основным приложением. Я реализовал i18next в репо с компонентами, и он отлично работает, когда у меня есть файл конфигурации i18n в этом репо (или когда я передаю его реквизитом из репозитория приложений). Но у меня проблема, когда я пытаюсь отправить из основного приложения только «ресурсную» часть и заменить ее в конфигурационном файле компонентов. Я попытался клонировать экземпляр i18n и установить ресурсы, но это не сработало. Это мой файл конфигурации: i18n.js

import i18n from 'i18next';
import LngDetector from 'i18next-browser-languagedetector';
import { reactI18nextModule } from 'react-i18next';

i18n
  .use(LngDetector)
  .use(reactI18nextModule)
  .init({
    detection: {
      order: ['cookie', 'localStorage'],
      lookupLocalStorage: 'i18n_lang',
      lookupCookie: 'i18n_lang',
      caches: ['localStorage'],
    },
    load: 'current',
    fallbackLng: 'en',

    ns: ['components'],
    defaultNS: 'components',

    keySeparator: false,
    interpolation: {
      escapeValue: false,
      formatSeparator: ',',
        },
        react: {
          wait: true,
     },
  });

export default i18n;

resources.js (вначале я пробовал использовать ключ ресурсов, но он все еще не работает):

import * as en from './en.json';
import * as de from './de.json';

export default {
  en: {
    components: en,
  },
  de: {
    components: de,
  },
};

Сейчас пробовал примерно так:

import * as langs from './resources';

const newI18 = i18n.cloneInstance({ resources: langs });

const i18ProviderDecorator = (storyFn) => (
  <I18nextProvider i18n={newI18}>
    { storyFn() }
  </I18nextProvider>

Когда я передаю i18n.js реквизитами с ресурсами, он работает отлично, но я хочу удалить i18next из основного приложения и оставить его только в компонентах. Привет


person jager91    schedule 13.02.2018    source источник


Ответы (1)


клонированный экземпляр i18next использует то же хранилище, что и исходный экземпляр -> и не инициализирует его снова -> поэтому передача ресурсов таким образом не работает: https://github.com/i18next/i18next/blob/master/src/i18next.js#L308

создайте новый экземпляр i18n.createInstance или передайте ресурсы для клонирования с помощью i18n.addResourceBundle: https://www.i18next.com/api.html#addresourcebundle.

person jamuhl    schedule 13.02.2018