language-toggle.vue 986 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. <script setup lang="ts">
  2. import type { SupportedLanguagesType } from '@vben/locales';
  3. import { SUPPORT_LANGUAGES } from '@vben/constants';
  4. import { Languages } from '@vben/icons';
  5. import { loadLocaleMessages } from '@vben/locales';
  6. import { preferences, updatePreferences } from '@vben/preferences';
  7. import { VbenDropdownRadioMenu, VbenIconButton } from '@vben-core/shadcn-ui';
  8. defineOptions({
  9. name: 'LanguageToggle',
  10. });
  11. async function handleUpdate(value: string | undefined) {
  12. if (!value) return;
  13. const locale = value as SupportedLanguagesType;
  14. updatePreferences({
  15. app: {
  16. locale,
  17. },
  18. });
  19. await loadLocaleMessages(locale);
  20. }
  21. </script>
  22. <template>
  23. <div>
  24. <VbenDropdownRadioMenu
  25. :menus="SUPPORT_LANGUAGES"
  26. :model-value="preferences.app.locale"
  27. @update:model-value="handleUpdate"
  28. >
  29. <VbenIconButton>
  30. <Languages class="text-foreground size-4" />
  31. </VbenIconButton>
  32. </VbenDropdownRadioMenu>
  33. </div>
  34. </template>