diff --git a/src/i18n/index.ts b/src/i18n/index.ts index c78217a3b..f44737786 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,4 +1,3 @@ -import {computed, ref, watch} from 'vue' import {createI18n} from 'vue-i18n' import langEN from './lang/en.json' @@ -23,10 +22,6 @@ export const DEFAULT_LANGUAGE: SupportedLocale= 'en' export type ISOLanguage = string -export const DAYJS_LOCALE_MAPPING = { - 'de-swiss': 'de-AT', -} as Record - export const i18n = createI18n({ locale: DEFAULT_LANGUAGE, // set locale fallbackLocale: DEFAULT_LANGUAGE, @@ -86,34 +81,4 @@ export function saveLanguage(lang: SupportedLocale) { export function setLanguage() { return loadLanguageAsync(getCurrentLanguage()) -} - -import type dayjs from 'dayjs' - -export function useDayjsLanguageSync(dayjsGlobal: typeof dayjs) { - const dayjsLanguageLoaded = ref(false) - watch( - () => i18n.global.locale, - async (currentLanguage: string) => { - if (!dayjsGlobal) { - return - } - const dayjsLanguageCode = DAYJS_LOCALE_MAPPING[currentLanguage.toLowerCase()] || currentLanguage.toLowerCase() - dayjsLanguageLoaded.value = dayjsGlobal.locale() === dayjsLanguageCode - if (dayjsLanguageLoaded.value) { - return - } - console.log('foo') - await import(`../../node_modules/dayjs/locale/${dayjsLanguageCode}.js`) - console.log('bar') - dayjsGlobal.locale(dayjsLanguageCode) - dayjsLanguageLoaded.value = true - }, - {immediate: true}, - ) - - // we export the loading state since that's easier to work with - const isLoading = computed(() => !dayjsLanguageLoaded.value) - - return isLoading } \ No newline at end of file diff --git a/src/i18n/useDayjsLanguageSync.ts b/src/i18n/useDayjsLanguageSync.ts new file mode 100644 index 000000000..377737de7 --- /dev/null +++ b/src/i18n/useDayjsLanguageSync.ts @@ -0,0 +1,60 @@ +import {computed, ref, watch} from 'vue' +import type dayjs from 'dayjs' +import type ILocale from 'dayjs/locale/*' + +import {i18n, type SupportedLocale, type ISOLanguage} from '@/i18n' + +export const DAYJS_LOCALE_MAPPING = { + 'de-de': 'de', + 'de-swiss': 'de-at', + 'ru-ru': 'ru', + 'fr-fr': 'fr', + 'vi-vn': 'vi', + 'it-it': 'it', + 'cs-cz': 'cs', + 'pl-pl': 'pl', + 'nl-nl': 'nl', + 'pt-pt': 'pt', + 'zh-cn': 'zh-cn', +} as Record + +export const DAYJS_LANGUAGE_IMPORTS = { + 'de-de': () => import('dayjs/locale/de'), + 'de-swiss': () => import('dayjs/locale/de-at'), + 'ru-ru': () => import('dayjs/locale/ru'), + 'fr-fr': () => import('dayjs/locale/fr'), + 'vi-vn': () => import('dayjs/locale/vi'), + 'it-it': () => import('dayjs/locale/it'), + 'cs-cz': () => import('dayjs/locale/cs'), + 'pl-pl': () => import('dayjs/locale/pl'), + 'nl-nl': () => import('dayjs/locale/nl'), + 'pt-pt': () => import('dayjs/locale/pt'), + 'zh-cn': () => import('dayjs/locale/zh-cn'), +} as Record Promise> + +export function useDayjsLanguageSync(dayjsGlobal: typeof dayjs) { + + const dayjsLanguageLoaded = ref(false) + watch( + () => i18n.global.locale, + async (currentLanguage: string) => { + if (!dayjsGlobal) { + return + } + const dayjsLanguageCode = DAYJS_LOCALE_MAPPING[currentLanguage.toLowerCase()] || currentLanguage.toLowerCase() + dayjsLanguageLoaded.value = dayjsGlobal.locale() === dayjsLanguageCode + if (dayjsLanguageLoaded.value) { + return + } + await DAYJS_LANGUAGE_IMPORTS[currentLanguage.toLowerCase()]() + dayjsGlobal.locale(dayjsLanguageCode) + dayjsLanguageLoaded.value = true + }, + {immediate: true}, + ) + + // we export the loading state since that's easier to work with + const isLoading = computed(() => !dayjsLanguageLoaded.value) + + return isLoading +} \ No newline at end of file