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 )})