Я знаю, как изменить язык 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 },
});