Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / i18n / loadLocale.ts
blobf6d19c7ad9f450f6c4087b046820f56fdafccb0b
1 import { addLocale as ttagAddLocale, useLocale as ttagUseLocale } from 'ttag';
3 import { DEFAULT_LOCALE } from '../constants';
4 import type { TtagLocaleMap } from '../interfaces/Locale';
5 import type { Options } from './dateFnLocale';
6 import { getDateFnLocaleWithLongFormat, getDateFnLocaleWithSettings } from './dateFnLocale';
7 import dateFnLocales from './dateFnLocales';
8 import { getClosestLocaleMatch, getLangAttribute, getLanguageCode } from './helper';
9 import { setDateLocales, setLocales } from './index';
11 export const loadLocale = async (localeCode: string, locales: TtagLocaleMap) => {
12     const languageCode = getLanguageCode(localeCode);
14     if (localeCode !== DEFAULT_LOCALE) {
15         const getLocaleData = locales[localeCode];
16         if (!getLocaleData) {
17             throw new Error('No locale data for requested localeCode');
18         }
19         const data = await getLocaleData();
20         ttagAddLocale(localeCode, data);
21     }
22     ttagUseLocale(localeCode);
24     setLocales({
25         localeCode,
26         languageCode,
27     });
29     if (typeof document !== 'undefined') {
30         document.documentElement.lang = getLangAttribute(localeCode);
31     }
34 export const loadDateLocale = async (localeCode: string, browserLocaleCode?: string, options?: Options) => {
35     const closestLocaleCode = getClosestLocaleMatch(localeCode, dateFnLocales) || DEFAULT_LOCALE;
36     const closestBrowserLocaleCode = getClosestLocaleMatch(browserLocaleCode, dateFnLocales) || DEFAULT_LOCALE;
37     const [dateFnLocale, browserDateFnLocale] = await Promise.all([
38         dateFnLocales[closestLocaleCode](),
39         dateFnLocales[closestBrowserLocaleCode](),
40     ]);
41     const mergedDateLocale = getDateFnLocaleWithLongFormat(dateFnLocale, browserDateFnLocale);
42     const updatedDateFnLocale = getDateFnLocaleWithSettings(mergedDateLocale, options);
44     setDateLocales({
45         defaultDateLocale: dateFnLocale,
46         browserDateLocale: browserDateFnLocale,
47         browserLocaleCode: closestBrowserLocaleCode,
48         dateLocale: updatedDateFnLocale,
49         dateLocaleCode: closestLocaleCode,
50     });
52     return updatedDateFnLocale;