1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/hooks/useLocale.tsx
2024-08-30 10:13:19 -04:00

40 lines
1.3 KiB
TypeScript

import type { Locale } from 'date-fns';
import enUS from 'date-fns/locale/en-US';
import { useEffect, useMemo, useState } from 'react';
import { getDefaultLanguage, normalizeLocaleName } from 'lib/globalize';
import { fetchLocale, normalizeLocale } from 'utils/dateFnsLocale';
import { useUserSettings } from './useUserSettings';
export function useLocale() {
const { dateTimeLocale: dateTimeSetting, language } = useUserSettings();
const [ dateFnsLocale, setDateFnsLocale ] = useState<Locale>(enUS);
const locale = useMemo(() => (
normalizeLocaleName(language || getDefaultLanguage())
), [ language ]);
const dateTimeLocale = useMemo(() => (
dateTimeSetting ? normalizeLocaleName(dateTimeSetting) : locale
), [ dateTimeSetting, locale ]);
useEffect(() => {
const fetchDateFnsLocale = async () => {
try {
const dfLocale = await fetchLocale(normalizeLocale(dateTimeLocale));
setDateFnsLocale(dfLocale);
} catch (err) {
console.warn('[useLocale] failed to fetch dateFns locale', err);
}
};
void fetchDateFnsLocale();
}, [ dateTimeLocale ]);
return {
locale,
dateTimeLocale,
dateFnsLocale
};
}