@tanosugi/better-auth-utils
Version:
Better Auth Utils
65 lines (62 loc) • 2.04 kB
JavaScript
import { getUILocaleDict } from './chunk-QP25E24L.mjs';
import './chunk-5ZITIWVT.mjs';
import { useState, useEffect } from 'react';
function browserLocale() {
let lang;
if (typeof navigator !== "undefined") {
lang = navigator.language || (Array.isArray(navigator.languages) && navigator.languages.length > 0 ? navigator.languages[0] : void 0);
}
return (lang ?? "en").split("-")[0] || "en";
}
function useUILocaleDict(locale, apiRoute) {
const resolvedLocale = locale ?? browserLocale();
const [data, setData] = useState(void 0);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
let localDict = void 0;
if (typeof window !== "undefined") {
const stored = localStorage.getItem(`ui-locale-dict-${resolvedLocale}`);
if (stored) {
try {
localDict = JSON.parse(stored);
setData(localDict);
setIsLoading(false);
} catch (e) {
localStorage.removeItem(`ui-locale-dict-${resolvedLocale}`);
}
}
}
if (localDict) return;
setIsLoading(true);
setError(null);
(async () => {
try {
let dict;
if (apiRoute) {
const res = await fetch(`${apiRoute}?locale=${resolvedLocale}`);
if (!res.ok) throw new Error(`API fetch failed: ${res.status}`);
dict = await res.json();
} else {
dict = await getUILocaleDict(resolvedLocale);
}
setData(dict);
setIsLoading(false);
if (typeof window !== "undefined") {
try {
localStorage.setItem(`ui-locale-dict-${resolvedLocale}`, JSON.stringify(dict));
} catch (e) {
}
}
} catch (e) {
setError(e);
setIsLoading(false);
if (typeof window !== "undefined") {
localStorage.removeItem(`ui-locale-dict-${resolvedLocale}`);
}
}
})();
}, [resolvedLocale, apiRoute]);
return { data, isLoading, error };
}
export { useUILocaleDict };