- Changed component names from kebab-case to PascalCase in various files for consistency. - Updated `<router-view>` and `<transition>` to `<RouterView>` and `<Transition>` respectively in App.vue and base-layout.vue. - Refactored AppNaiveUIProvider.vue to use PascalCase for Naive UI providers. - Adjusted language and theme switch buttons to use PascalCase for icon components. - Updated button components in demo pages to use PascalCase for Naive UI buttons. - Modified ESLint rules in route message files to use perfectionist/sort-objects for better key sorting. - Enhanced Vite plugin files to export loadPlugin functions for better plugin management. - Improved plugin loading logic to handle errors and warnings more effectively.
34 lines
850 B
Vue
34 lines
850 B
Vue
<script setup lang="ts">
|
|
import type { DropdownOption } from 'naive-ui';
|
|
|
|
const { locale, availableLocales } = useI18n({ useScope: 'global' });
|
|
|
|
const languageLabels: Record<string, string> = {
|
|
'en-US': 'English',
|
|
'zh-CN': '简体中文',
|
|
};
|
|
|
|
const options = computed<DropdownOption[]>(() =>
|
|
availableLocales.map((lang) => ({
|
|
label: languageLabels[lang] || lang,
|
|
key: lang,
|
|
disabled: locale.value === lang,
|
|
})),
|
|
);
|
|
|
|
function handleSelect(key: string) {
|
|
locale.value = key;
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<NDropdown trigger="hover" placement="bottom-end" :options="options" @select="handleSelect">
|
|
<NButton quaternary class="flex items-center gap-1">
|
|
<template #icon>
|
|
<IconClarityLanguageLine w-4.5 h-4.5 />
|
|
</template>
|
|
<span>{{ languageLabels[locale] }}</span>
|
|
</NButton>
|
|
</NDropdown>
|
|
</template>
|