Как обновить язык react-i18next в зависимости от состояния?

Я знаю, как изменить язык response-i18next, но это изменение будет действительным только для текущего сеанса или устройства.

Итак, при изменении языкового стандарта я сначала обновляю i18next, чтобы обеспечить немедленную обратную связь ux, а затем делаю вызов api для обновления профиля пользователя в моей базе данных.

export async function useLocale(locale: Locale) {
  const { i18n } = useTranslation();
  const { updateProfile }= userService();
  i18n.changeLanguage(locale);
  return updateProfile({locale})
}

Теперь, как убедиться, что i18next выбирает языковой стандарт из состояния пользователя при следующем подключении? Мое состояние пользователя хранится в zustand:

export const userStore = create(() => ({ name: "Joe", locale: "en" }));

I18nconfig:

const languages = {
  EN: "en",
  FR: "fr",
};

const langDetectorOptions = {
  order: ["cookie", "localStorage", "navigator"],
  lookupCookie: "locale",
  lookupLocalStorage: "locale",
  caches: ["localStorage", "cookie"],
  excludeCacheFor: ["cimode"],
  checkWhitelist: true,
};

const resources = {
  en: { translation: en },
  fr: { translation: fr },
};

export default i18n
  .use(LanguageDetector)
  .use(initReactI18next)
  .init({
    resources,
    lng: languages.EN,
    detection: langDetectorOptions,
    fallbackLng: languages.EN,
    keySeparator: ".",
    whitelist: [languages.EN, languages.FR],
    interpolation: { escapeValue: false },
  });


person DoneDeal0    schedule 31.01.2021    source источник


Ответы (1)


Возможно, вам потребуется реализовать собственный детектор языка: https://www.i18next.com/misc/creating-own-plugins.html#languagedetector

person adrai    schedule 04.02.2021