SetLanguage.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <script setup lang="ts">
  2. import loadTranslations from '@/api/translations'
  3. import gettext from '@/gettext'
  4. import { useSettingsStore } from '@/pinia'
  5. import dayjs from 'dayjs'
  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. import 'dayjs/locale/ar'
  16. import 'dayjs/locale/ru'
  17. import 'dayjs/locale/tr'
  18. import 'dayjs/locale/vi'
  19. const settings = useSettingsStore()
  20. const route = useRoute()
  21. const current = computed({
  22. get() {
  23. return gettext.current
  24. },
  25. set(v) {
  26. gettext.current = v
  27. },
  28. })
  29. const languageAvailable = gettext.available
  30. function updateTitle() {
  31. const name = route.meta.name as never as () => string
  32. document.title = `${name()} | Nginx UI`
  33. }
  34. watch(current, v => {
  35. loadTranslations(route)
  36. settings.set_language(v)
  37. gettext.current = v
  38. updateTitle()
  39. })
  40. onMounted(() => {
  41. updateTitle()
  42. })
  43. function init() {
  44. switch (current.value) {
  45. case 'fr':
  46. dayjs.locale('fr')
  47. break
  48. case 'ja':
  49. dayjs.locale('ja')
  50. break
  51. case 'ko':
  52. dayjs.locale('ko')
  53. break
  54. case 'de':
  55. dayjs.locale('de')
  56. break
  57. case 'zh_CN':
  58. dayjs.locale('zh-cn')
  59. break
  60. case 'zh_TW':
  61. dayjs.locale('zh-tw')
  62. break
  63. case 'pt':
  64. dayjs.locale('pt')
  65. break
  66. case 'es':
  67. dayjs.locale('es')
  68. break
  69. case 'it':
  70. dayjs.locale('it')
  71. break
  72. case 'ar':
  73. dayjs.locale('ar')
  74. break
  75. case 'ru':
  76. dayjs.locale('ru')
  77. break
  78. case 'tr':
  79. dayjs.locale('tr')
  80. break
  81. case 'vi':
  82. dayjs.locale('vi')
  83. break
  84. default:
  85. dayjs.locale('en')
  86. }
  87. }
  88. init()
  89. watch(current, init)
  90. </script>
  91. <template>
  92. <div>
  93. <ASelect
  94. v-model:value="current"
  95. size="small"
  96. style="width: 60px"
  97. >
  98. <ASelectOption
  99. v-for="(language, key) in languageAvailable"
  100. :key="key"
  101. :value="key"
  102. >
  103. {{ language }}
  104. </ASelectOption>
  105. </ASelect>
  106. </div>
  107. </template>
  108. <style lang="less" scoped>
  109. </style>