cwg-language.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <template>
  2. <cwg-dropdown :menu-list="customMenuList" @menuClick="handleMenuClick">
  3. <view class="pc-header-btn">
  4. <cwg-icon name="cwg-lang" color="#141d22" />
  5. </view>
  6. </cwg-dropdown>
  7. </template>
  8. <script setup lang="ts">
  9. import { computed } from 'vue'
  10. import { useI18n } from 'vue-i18n'
  11. import { localesList, LANG_MAP } from '@/locale/index'
  12. import { lang } from '@/composables/config'
  13. const { t, locale } = useI18n()
  14. const customMenuList = computed(() =>
  15. localesList.map((code) => ({
  16. label: t(`language.${code}`),
  17. type: code
  18. })),
  19. )
  20. function handleMenuClick({ value }: { value: any }) {
  21. const type = value?.type ?? value
  22. if (!type) return
  23. locale.value = type
  24. lang.value = type
  25. const localeValue = LANG_MAP[type] || 'zh-Hans'
  26. uni.setLocale(localeValue)
  27. }
  28. function getFlagSrc(code: string) {
  29. switch (code) {
  30. case 'en':
  31. return '/static/flag-en.png'
  32. case 'cn':
  33. return '/static/flag-cn.png'
  34. case 'zhHant':
  35. return '/static/flag-zhHant.png'
  36. case 'es':
  37. return '/static/flag-es.png'
  38. default:
  39. return '/static/flag-en.png'
  40. }
  41. }
  42. </script>
  43. <style scoped lang="scss">
  44. @import "@/uni.scss";
  45. :deep(.cwg-dropdown-menu-container .menu .menu-item) {
  46. min-height: px2rpx(36);
  47. }
  48. :deep(.cwg-dropdown) {
  49. overflow: visible !important;
  50. }
  51. </style>