SetLanguage.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <script setup lang="ts">
  2. import dayjs from 'dayjs'
  3. import { useSettingsStore } from '@/pinia'
  4. import gettext from '@/gettext'
  5. import loadTranslations from '@/api/translations'
  6. import 'dayjs/locale/fr'
  7. import 'dayjs/locale/ja'
  8. import 'dayjs/locale/ko'
  9. import 'dayjs/locale/de'
  10. import 'dayjs/locale/zh-cn'
  11. import 'dayjs/locale/zh-tw'
  12. import 'dayjs/locale/pt'
  13. import 'dayjs/locale/es'
  14. import 'dayjs/locale/it'
  15. const settings = useSettingsStore()
  16. const route = useRoute()
  17. const current = computed({
  18. get() {
  19. return gettext.current
  20. },
  21. set(v) {
  22. gettext.current = v
  23. },
  24. })
  25. const languageAvailable = gettext.available
  26. watch(current, v => {
  27. loadTranslations(route)
  28. settings.set_language(v)
  29. gettext.current = v
  30. const name = route.meta.name as never as () => string
  31. document.title = `${name()} | Nginx UI`
  32. })
  33. function init() {
  34. switch (current.value) {
  35. case 'fr':
  36. dayjs.locale('fr')
  37. break
  38. case 'ja':
  39. dayjs.locale('ja')
  40. break
  41. case 'ko':
  42. dayjs.locale('ko')
  43. break
  44. case 'de':
  45. dayjs.locale('de')
  46. break
  47. case 'en':
  48. dayjs.locale('en')
  49. break
  50. case 'zh_TW':
  51. dayjs.locale('zh-tw')
  52. break
  53. case 'pt':
  54. dayjs.locale('pt')
  55. break
  56. case 'es':
  57. dayjs.locale('es')
  58. break
  59. case 'it':
  60. dayjs.locale('it')
  61. break
  62. default:
  63. dayjs.locale('zh-cn')
  64. }
  65. }
  66. init()
  67. watch(current, init)
  68. </script>
  69. <template>
  70. <div>
  71. <ASelect
  72. v-model:value="current"
  73. size="small"
  74. style="width: 60px"
  75. >
  76. <ASelectOption
  77. v-for="(language, key) in languageAvailable"
  78. :key="key"
  79. :value="key"
  80. >
  81. {{ language }}
  82. </ASelectOption>
  83. </ASelect>
  84. </div>
  85. </template>
  86. <style lang="less" scoped>
  87. </style>