Я использую 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 перед экспортом компонента?
Заранее спасибо за любые предложения!