mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
40 lines
1.3 KiB
TypeScript
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
|
|
};
|
|
}
|