Загрузка переводов из нескольких бэкэндов

У меня есть приложение React, использующее response-i18next, переводы хранятся в двух местах. Один набор хранится локально в приложении в папке, остальные переводы поступают из удаленного API.

Я изо всех сил пытаюсь загрузить оба набора в приложение. Используя плагин i18next-chained-backend, кажется, что он предоставляет резервные копии только в том случае, если первый backend не загружает переводы, я не могу настроить его для загрузки обоих наборов переводов.

Как лучше всего включать переводы из нескольких источников в приложение на основе React?


person Rob Holmes    schedule 26.02.2019    source источник
comment
Тот же вопрос здесь   -  person Emil Alkalay    schedule 18.09.2019
comment
почему вы не загружаете перевод при загрузке страницы или смене языка и не объединяете их?   -  person abhirathore2006    schedule 25.09.2019


Ответы (2)


Я мог загружать переводы из разных мест без каких-либо зависимостей. (Только с пакетами npm 'response-i18next' и 'i18next')

Я выполнил следующие шаги:

  1. В i18n.js задайте определения локали на стороне клиента.
  2. Предоставьте список пространств имен для поиска ключей перевода в ns ключе того же файла.
    # P3 #
  3. В вашем основном компоненте реакции получите свои переводы из конечной точки API.
    # P4 #
  4. Используя i18next.addResourceBundle API, загрузите эти переводы на нужный вам язык.
    # P5 #
  5. Остальные API перевода такие же.

Живая песочница здесь - https://codesandbox.io/embed/i18next-muliple-files-p565v

  • Местные переводы - "Привет", "Доброе утро".
  • Переводы, загруженные с другой конечной точки - "Хорошо"

Надеюсь это поможет.

person pritam    schedule 25.09.2019

Мне удалось с этим справиться.

Он работает с классической системой i18next-xhr-backend.

Вам необходимо подготовить пользовательскую функцию, составляющую путь:

const constructLoadPath = (languages, namespaces) => {
      if(namespaces[0] === 'basecontent'){
        return 'http://localhost:8080/api/i18n/{{lng}}/'
      }else {
        return '/locales/' + languages.join('+') + '/' + namespaces.join('+') + '.json';
      }
    } 

тогда вам необходимо предоставить эту функцию для опции loadPath серверной части

backend: {
  loadPath: constructLoadPath,
}
person Emil Alkalay    schedule 18.09.2019