use.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // @ts-nocheck
  2. import {DayutsLocale} from '../utssdk/interface'
  3. import en from './locale/en'
  4. import zhCn from './locale/zh-cn'
  5. // #ifndef UNI-APP-X
  6. // #ifdef VUE2
  7. import {reactive} from '@vue/composition-api'
  8. // #endif
  9. // #ifdef VUE3
  10. import {reactive} from 'vue'
  11. // #endif
  12. // #endif
  13. const localesMap = new Map<string, DayutsLocale>()
  14. //定义一个大写的State类型
  15. type LocaleState = {
  16. lang: string;
  17. locales: Map<string, DayutsLocale>
  18. }
  19. export let localeState = reactive({
  20. lang: 'en',
  21. locales: localesMap
  22. } as LocaleState)
  23. localeState.locales.set('en', en)
  24. localeState.locales.set('zh-cn', zhCn)
  25. class DayutsIntl {
  26. constructor(){}
  27. use(locale:DayutsLocale):DayutsIntl{
  28. localeState.locales.set(locale.name, locale)
  29. return this
  30. }
  31. set locale(locale: string){
  32. if(localeState.locales.has(locale)){
  33. localeState.lang = locale
  34. } else {
  35. let list:string[] = []
  36. localeState.locales.forEach(function(_:any,key:string){
  37. list.push(key)
  38. })
  39. console.warn(`未知语言: "${locale}". 请使用以下已知语言之一:${list.join(', ')}`);
  40. }
  41. }
  42. get locale(): string{
  43. return localeState.lang
  44. }
  45. set(name: string, locale:DayutsLocale){
  46. localeState.locales.set(name, locale)
  47. }
  48. has(name: string):boolean{
  49. return localeState.locales.has(name)
  50. }
  51. }
  52. export const dayutsIntl = new DayutsIntl()
  53. // const dyauts = use(xx).use(xx).use(xx).use(xx)
  54. // dyauts.locale ='zh'