Как использовать результаты из i18nextBrowserLanguageDetector - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь использовать 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, но это было бы глупо и неэффективно.

1 Ответ

0 голосов
/ 11 октября 2018

как насчет использования:

i18next.on('languageChanged', function(lng) {
    window.location.href = `${location.origin}/${lng}${location.pathname}`;
});)

также используйте опцию белого списка, чтобы lng всегда был тем, что вы поддерживаете;)

...