35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { useEffect } from "react";
|
|
import { useTranslation } from "react-i18next";
|
|
import { useAuth } from "@/contexts/AuthContext";
|
|
import { getLocaleWithFallback, loadLocale } from "@/utils/i18n";
|
|
|
|
/**
|
|
* Hook that reactively applies user locale preference.
|
|
* Priority: User setting → localStorage → browser language
|
|
*/
|
|
export const useUserLocale = () => {
|
|
const { i18n } = useTranslation();
|
|
const { userGeneralSetting } = useAuth();
|
|
|
|
// Apply locale when user setting changes or user logs in
|
|
useEffect(() => {
|
|
if (!userGeneralSetting) {
|
|
return;
|
|
}
|
|
const locale = getLocaleWithFallback(userGeneralSetting.locale);
|
|
loadLocale(locale);
|
|
}, [userGeneralSetting?.locale]);
|
|
|
|
// Update HTML lang and dir attributes based on current locale
|
|
useEffect(() => {
|
|
const currentLocale = i18n.language;
|
|
document.documentElement.setAttribute("lang", currentLocale);
|
|
|
|
// RTL languages
|
|
if (["ar", "fa"].includes(currentLocale)) {
|
|
document.documentElement.setAttribute("dir", "rtl");
|
|
} else {
|
|
document.documentElement.setAttribute("dir", "ltr");
|
|
}
|
|
}, [i18n.language]);
|
|
};
|