language-toggle.vue 967 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <script setup lang="ts">
  2. import type { LocaleSupportType } from '@vben/types';
  3. import { IcBaselineLanguage } from '@vben-core/iconify';
  4. import {
  5. SUPPORT_LANGUAGES,
  6. preferences,
  7. updatePreferences,
  8. } from '@vben-core/preferences';
  9. import { VbenDropdownRadioMenu, VbenIconButton } from '@vben-core/shadcn-ui';
  10. import { loadLocaleMessages } from '@vben/locales';
  11. defineOptions({
  12. name: 'LanguageToggle',
  13. });
  14. const menus = SUPPORT_LANGUAGES;
  15. async function handleUpdate(value: string) {
  16. const locale = value as LocaleSupportType;
  17. updatePreferences({
  18. app: {
  19. locale,
  20. },
  21. });
  22. // 更改预览
  23. await loadLocaleMessages(locale);
  24. }
  25. </script>
  26. <template>
  27. <div>
  28. <VbenDropdownRadioMenu
  29. :menus="menus"
  30. :model-value="preferences.app.locale"
  31. @update:model-value="handleUpdate"
  32. >
  33. <VbenIconButton>
  34. <IcBaselineLanguage class="size-5" />
  35. </VbenIconButton>
  36. </VbenDropdownRadioMenu>
  37. </div>
  38. </template>