import type { LocaleSetting, LocaleType } from '@/types/config' import { defineStore } from 'pinia' import { store } from '@/store' import { LOCALE_KEY } from '@/enums/cacheEnum' import { createLocalStorage } from '@/utils/cache' import { localeSetting } from '@/settings/localeSetting' const ls = createLocalStorage() const lsLocaleSetting = (ls.get(LOCALE_KEY) || localeSetting) as LocaleSetting interface LocaleState { localInfo: LocaleSetting } export const useLocaleStore = defineStore('app-locale', { state: (): LocaleState => ({ localInfo: lsLocaleSetting }), getters: { getShowPicker(state): boolean { return !!state.localInfo?.showPicker }, getLocale(state): LocaleType { return state.localInfo?.locale ?? 'zh_CN' } }, actions: { /** * Set up multilingual information and cache * @param info multilingual info */ setLocaleInfo(info: Partial) { this.localInfo = { ...this.localInfo, ...info } ls.set(LOCALE_KEY, this.localInfo) }, /** * Initialize multilingual information and load the existing configuration from the local cache */ initLocale() { this.setLocaleInfo({ ...localeSetting, ...this.localInfo }) } } }) // Need to be used outside the setup export function useLocaleStoreWithOut() { return useLocaleStore(store) }