index.ts 876 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import zhCn from './locales/zh-cn'
  2. export type LocaleType = 'zh-cn' | 'en-us'
  3. const messages = {
  4. 'zh-cn': zhCn,
  5. 'en-us': {}
  6. }
  7. class I18n {
  8. private currentLocale: LocaleType = 'zh-cn'
  9. constructor() {
  10. // 从本地存储获取语言设置
  11. const savedLocale = localStorage.getItem('locale') as LocaleType
  12. if (savedLocale && messages[savedLocale]) {
  13. this.currentLocale = savedLocale
  14. }
  15. }
  16. setLocale(locale: LocaleType) {
  17. if (messages[locale]) {
  18. this.currentLocale = locale
  19. localStorage.setItem('locale', locale)
  20. }
  21. }
  22. getLocale() {
  23. return this.currentLocale
  24. }
  25. t(key: string): string {
  26. const keys = key.split('.')
  27. let value: any = messages[this.currentLocale]
  28. for (const k of keys) {
  29. value = value?.[k]
  30. }
  31. return typeof value === 'string' ? value : key
  32. }
  33. }
  34. export default new I18n()