index.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * index
  3. * @author: oldj
  4. * @homepage: https://oldj.net
  5. */
  6. import en from './languages/en'
  7. import zh from './languages/zh'
  8. import fr from './languages/fr'
  9. import de from './languages/de'
  10. import { LanguageDict, LanguageKey } from '@root/common/types'
  11. export const languages = {
  12. en,
  13. zh,
  14. cn: zh,
  15. 'zh-CN': zh,
  16. fr,
  17. de,
  18. }
  19. export type LocaleName = keyof typeof languages
  20. export class I18N {
  21. locale: LocaleName
  22. lang: LanguageDict
  23. constructor(locale: LocaleName = 'en') {
  24. this.locale = locale
  25. const _this = this
  26. this.lang = new Proxy(
  27. {},
  28. {
  29. get(obj, key: LanguageKey) {
  30. return _this.trans(key)
  31. },
  32. },
  33. ) as LanguageDict
  34. }
  35. trans(key: LanguageKey, words?: string[]) {
  36. let lang = languages[this.locale]
  37. let s: string = ''
  38. if (key in lang) {
  39. s = lang[key].toString()
  40. }
  41. if (words) {
  42. words.map((w, idx) => {
  43. let reg = new RegExp(`\{\s*${idx}\s*}`)
  44. s = s.replace(reg, w)
  45. })
  46. }
  47. return s
  48. }
  49. }