Fix: SSR safety for themes and i18n
This commit is contained in:
parent
9e562b6ca8
commit
ff5dac3ef4
1 changed files with 14 additions and 5 deletions
|
|
@ -189,9 +189,16 @@ export const translations = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export function useLanguage() {
|
export function useLanguage() {
|
||||||
const [lang, setLangState] = useState<Language>(() => {
|
const [lang, setLangState] = useState<Language>('pt');
|
||||||
return (localStorage.getItem('lang') as Language) || 'pt';
|
|
||||||
});
|
useEffect(() => {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
const saved = localStorage.getItem('lang');
|
||||||
|
if (saved && (translations as any)[saved]) {
|
||||||
|
setLangState(saved as Language);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleLangChange = (e: Event) => {
|
const handleLangChange = (e: Event) => {
|
||||||
|
|
@ -202,10 +209,12 @@ export function useLanguage() {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const setLang = (l: Language) => {
|
const setLang = (l: Language) => {
|
||||||
localStorage.setItem('lang', l);
|
if (typeof window !== 'undefined') {
|
||||||
|
localStorage.setItem('lang', l);
|
||||||
|
}
|
||||||
setLangState(l);
|
setLangState(l);
|
||||||
window.dispatchEvent(new CustomEvent('lang-change', { detail: l }));
|
window.dispatchEvent(new CustomEvent('lang-change', { detail: l }));
|
||||||
};
|
};
|
||||||
|
|
||||||
return { lang, setLanguage: setLang, setLang, t: translations[lang] };
|
return { lang, setLanguage: setLang, setLang, t: (translations as any)[lang] || translations.pt };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue