master
 1// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
 2/* eslint-disable */
 3
 4import { initFormatters } from './formatters.js'
 5import type { Locales, Namespaces, Translations } from './i18n-types.js'
 6import { loadedFormatters, loadedLocales, locales } from './i18n-util.js'
 7
 8const localeTranslationLoaders = {
 9	en: () => import('./en/index.js'),
10	'zh-CN': () => import('./zh-CN/index.js'),
11	'zh-TW': () => import('./zh-TW/index.js'),
12}
13
14const localeNamespaceLoaders = {
15	en: {
16		cli: () => import('./en/cli/index.js'),
17		web: () => import('./en/web/index.js')
18	},
19	'zh-CN': {
20		cli: () => import('./zh-CN/cli/index.js'),
21		web: () => import('./zh-CN/web/index.js')
22	},
23	'zh-TW': {
24		cli: () => import('./zh-TW/cli/index.js'),
25		web: () => import('./zh-TW/web/index.js')
26	}
27}
28
29const updateDictionary = (locale: Locales, dictionary: Partial<Translations>): Translations =>
30	loadedLocales[locale] = { ...loadedLocales[locale], ...dictionary }
31
32export const importLocaleAsync = async (locale: Locales): Promise<Translations> =>
33	(await localeTranslationLoaders[locale]()).default as unknown as Translations
34
35export const loadLocaleAsync = async (locale: Locales): Promise<void> => {
36	updateDictionary(locale, await importLocaleAsync(locale))
37	loadFormatters(locale)
38}
39
40export const loadAllLocalesAsync = (): Promise<void[]> => Promise.all(locales.map(loadLocaleAsync))
41
42export const loadFormatters = (locale: Locales): void =>
43	void (loadedFormatters[locale] = initFormatters(locale))
44
45export const importNamespaceAsync = async<Namespace extends Namespaces>(locale: Locales, namespace: Namespace) =>
46	(await localeNamespaceLoaders[locale][namespace]()).default as unknown as Translations[Namespace]
47
48export const loadNamespaceAsync = async <Namespace extends Namespaces>(locale: Locales, namespace: Namespace): Promise<void> =>
49	void updateDictionary(locale, { [namespace]: await importNamespaceAsync(locale, namespace )})