language-toggle.vue 952 B

1234567891011121314151617181920212223242526272829303132333435363738
  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) {
  12. const locale = value as SupportedLanguagesType;
  13. updatePreferences({
  14. app: {
  15. locale,
  16. },
  17. });
  18. await loadLocaleMessages(locale);
  19. }
  20. </script>
  21. <template>
  22. <div>
  23. <VbenDropdownRadioMenu
  24. :menus="SUPPORT_LANGUAGES"
  25. :model-value="preferences.app.locale"
  26. @update:model-value="handleUpdate"
  27. >
  28. <VbenIconButton>
  29. <Languages class="text-foreground size-4" />
  30. </VbenIconButton>
  31. </VbenDropdownRadioMenu>
  32. </div>
  33. </template>