Столкнулись с трудностями при инициализации компонента реакции i18next с данными ответа выборки? - PullRequest
0 голосов
/ 15 апреля 2019

Я использую i18next для интернализации.

Запрос на выборку по умолчанию, используемый для получения данных с сервера и информации о языке, доступной в данных ответа. На основании информации о языке страница должна быть загружена на соответствующем языке

import i18n from 'i18next';
import { reactI18nextModule } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import translationEN from './locales/en/translation.json';
import translationDE from './locales/de/translation.json';

// the translations
let language;
function sendRequest(resources) {
  console.log('resources', resources);
  i18n
    .use(reactI18nextModule) // passes i18n down to react-i18next
    .init(
      {
        resources,
        lng: language,
        fallbackLng: 'en',
        keySeparator: false, // we do not use keys in form messages.welcome

        interpolation: {
          escapeValue: false // react already safes from xss
        }
      },
      function() {
        fetch('http://localhost:3100/getLang')
          .then(data => data.json())
          .then(res => {
            console.log(res);
            language = res.lang;
            i18n.changeLanguage(language, (err, t) => {
              if (err)
                return console.log(
                  'something went wrong loading the language',
                  err
                );
            });
          });
      }
    );
  return i18n;
}
function i18() {
  const resources = {
    en: {
      translation: translationEN
    },
    de: {
      translation: translationDE
    }
  };
  return sendRequest(resources);
}
export default i18();

Языковая переменная изначально не определена. Впервые i18n init метод настроен с переменной «fallbackLng» вместо «lng». После этого запрос на выборку переходит в обратный вызов метода init. Это будет иметь ответ языка необходимо использовать. Тогда метод i18n changeLanguage поможет изменить язык.

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

Есть ли альтернативный способ сначала выполнить запрос выборки, а затем настроить i18n перед экспортом компонента?

Заранее спасибо за любые предложения!

...