Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / i18n / relocalize.ts
blob3b18e13ce891416fa9a23c8ef054904d3c404631
1 import { addLocale as ttagAddLocale, useLocale as ttagUseLocale } from 'ttag';
3 import { DEFAULT_LOCALE } from '../constants';
4 import type { Options } from './dateFnLocale';
5 import { getBrowserLocale, getClosestLocaleCode } from './helper';
6 import {
7     browserDateLocale,
8     browserLocaleCode,
9     dateLocale,
10     dateLocaleCode,
11     defaultDateLocale,
12     localeCode,
13     setDateLocales,
14 } from './index';
15 import { loadDateLocale } from './loadLocale';
16 import { locales } from './locales';
18 export const relocalizeText = async ({
19     getLocalizedText,
20     newLocaleCode,
21     relocalizeDateFormat,
22     userSettings,
23 }: {
24     getLocalizedText: () => string;
25     newLocaleCode?: string;
26     relocalizeDateFormat?: boolean;
27     userSettings?: Options;
28 }) => {
29     const currentLocaleCode = localeCode;
30     const [
31         currentDefaultDateLocale,
32         currentBrowserDateLocale,
33         currentBrowserLocaleCode,
34         currentDateLocale,
35         currentDateLocaleCode,
36     ] = [defaultDateLocale, browserDateLocale, browserLocaleCode, dateLocale, dateLocaleCode];
37     if (!newLocaleCode || newLocaleCode === currentLocaleCode) {
38         return getLocalizedText();
39     }
40     try {
41         const newSafeLocaleCode = getClosestLocaleCode(newLocaleCode, locales);
42         const useDefaultLocale = newSafeLocaleCode === DEFAULT_LOCALE;
43         const [newTtagLocale] = await Promise.all([
44             useDefaultLocale ? undefined : locales[newSafeLocaleCode]?.(),
45             relocalizeDateFormat ? loadDateLocale(newSafeLocaleCode, getBrowserLocale(), userSettings) : undefined,
46         ]);
47         if (!useDefaultLocale && !newTtagLocale) {
48             throw new Error('No locale data for requested localeCode');
49         }
50         if (newTtagLocale) {
51             ttagAddLocale(newSafeLocaleCode, newTtagLocale);
52         }
53         ttagUseLocale(newSafeLocaleCode);
54         return getLocalizedText();
55     } catch (e) {
56         return getLocalizedText();
57     } finally {
58         ttagUseLocale(currentLocaleCode);
59         setDateLocales({
60             defaultDateLocale: currentDefaultDateLocale,
61             browserDateLocale: currentBrowserDateLocale,
62             browserLocaleCode: currentBrowserLocaleCode,
63             dateLocale: currentDateLocale,
64             dateLocaleCode: currentDateLocaleCode,
65         });
66     }