Files
Reactive-Resume/apps/client/src/providers/locale.tsx
Amruth Pillai b47b7824ff - bump up version to 4.0.6
- update dependencies
- remove test phase from CI script
- lint and format all files
2024-03-10 10:35:23 +01:00

46 lines
1.4 KiB
TypeScript

import "@/client/libs/dayjs";
import { i18n } from "@lingui/core";
import { detect, fromStorage, fromUrl } from "@lingui/detect-locale";
import { I18nProvider } from "@lingui/react";
import { languages } from "@reactive-resume/utils";
import { useEffect } from "react";
import { defaultLocale, dynamicActivate } from "../libs/lingui";
import { updateUser } from "../services/user";
import { useAuthStore } from "../stores/auth";
type Props = {
children: React.ReactNode;
};
export const LocaleProvider = ({ children }: Props) => {
const userLocale = useAuthStore((state) => state.user?.locale);
useEffect(() => {
const detectedLocale =
detect(fromUrl("locale"), fromStorage("locale"), userLocale, defaultLocale) ?? defaultLocale;
// Activate the locale only if it's supported
if (languages.some((lang) => lang.locale === detectedLocale)) {
dynamicActivate(detectedLocale);
} else {
dynamicActivate(defaultLocale);
}
}, [userLocale]);
return <I18nProvider i18n={i18n}>{children}</I18nProvider>;
};
export const changeLanguage = async (locale: string) => {
// Update locale in local storage
window.localStorage.setItem("locale", locale);
// Update locale in user profile, if authenticated
const state = useAuthStore.getState();
if (state.user) await updateUser({ locale }).catch(() => null);
// Reload the page for language switch to take effect
window.location.reload();
};