Я пытаюсь использовать i18nextBrowserLanguageDetector , чтобы определить языковые настройки браузера пользователя и перенаправить их на переведенную страницу, если мы поддерживаем их предпочитаемый язык.Кажется, что первая часть кода ниже работает нормально и будет правильно кэшировать языковые предпочтения пользователя в файле cookie.
import i18next from 'i18next';
import LngDetector from 'i18next-browser-languagedetector';
i18next
.use(LngDetector)
.init({
detection: {
// order and from where user language should be detected
order: ['cookie', 'navigator', 'htmlTag', 'path'],
// keys or params to lookup language from
lookupCookie: LANG_COOKIE,
lookupFromPathIndex: 0,
// cache user language on
caches: ['cookie']
}
});
Однако проблема в том, что я хочу сделать что-то на основенастройка языка пользователя, но кажется, что i18next выполняет свой код обнаружения асинхронно, но не обеспечивает никакого обратного вызова, который я вижу.Часть проблемы в том, что их документы действительно тонкие.Что я сделал, так это добавил код в готовый документ следующим образом:
document.addEventListener('DOMContentLoaded', () => {
const langPref = Cookies(LANG_COOKIE);
if (!!langPref && SUPPORTED_LANGS.includes(langPref) && langPref !== currentLocale())
window.location.href = `${location.origin}/${langPref}${location.pathname}`;
});
Но языковой файл cookie никогда не устанавливается к моменту завершения загрузки страницы.Я мог бы добавить setTimeout / Interval, но это было бы глупо и неэффективно.