UNPKG

@tanosugi/better-auth-utils

Version:

Better Auth Utils

65 lines (62 loc) 2.04 kB
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 };