locale.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { defineStore } from 'pinia'
  2. import { store } from '../index'
  3. import zhCn from 'element-plus/es/locale/lang/zh-cn'
  4. import en from 'element-plus/es/locale/lang/en'
  5. import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
  6. import { LocaleDropdownType } from '@/types/localeDropdown'
  7. const { wsCache } = useCache()
  8. const elLocaleMap = {
  9. 'zh-CN': zhCn,
  10. en: en
  11. }
  12. interface LocaleState {
  13. currentLocale: LocaleDropdownType
  14. localeMap: LocaleDropdownType[]
  15. }
  16. export const useLocaleStore = defineStore('locales', {
  17. state: (): LocaleState => {
  18. return {
  19. currentLocale: {
  20. lang: wsCache.get(CACHE_KEY.LANG) || 'zh-CN',
  21. elLocale: elLocaleMap[wsCache.get(CACHE_KEY.LANG) || 'zh-CN']
  22. },
  23. // 多语言
  24. localeMap: [
  25. {
  26. lang: 'zh-CN',
  27. name: '简体中文'
  28. },
  29. {
  30. lang: 'en',
  31. name: 'English'
  32. }
  33. ]
  34. }
  35. },
  36. getters: {
  37. getCurrentLocale(): LocaleDropdownType {
  38. return this.currentLocale
  39. },
  40. getLocaleMap(): LocaleDropdownType[] {
  41. return this.localeMap
  42. }
  43. },
  44. actions: {
  45. setCurrentLocale(localeMap: LocaleDropdownType) {
  46. // this.locale = Object.assign(this.locale, localeMap)
  47. this.currentLocale.lang = localeMap?.lang
  48. this.currentLocale.elLocale = elLocaleMap[localeMap?.lang]
  49. wsCache.set(CACHE_KEY.LANG, localeMap?.lang)
  50. }
  51. }
  52. })
  53. export const useLocaleStoreWithOut = () => {
  54. return useLocaleStore(store)
  55. }