language-toggle.vue 968 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <script setup lang="ts">
  2. import type { SupportedLanguagesType } from '@vben-core/typings';
  3. import { Languages } from '@vben-core/icons';
  4. import { loadLocaleMessages } from '@vben-core/locales';
  5. import {
  6. SUPPORT_LANGUAGES,
  7. preferences,
  8. updatePreferences,
  9. } from '@vben-core/preferences';
  10. import { VbenDropdownRadioMenu, VbenIconButton } from '@vben-core/shadcn-ui';
  11. defineOptions({
  12. name: 'LanguageToggle',
  13. });
  14. const menus = SUPPORT_LANGUAGES;
  15. async function handleUpdate(value: string) {
  16. const locale = value as SupportedLanguagesType;
  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. <Languages class="size-4" />
  35. </VbenIconButton>
  36. </VbenDropdownRadioMenu>
  37. </div>
  38. </template>