mirror of
https://github.com/rustfs/console.git
synced 2026-09-21 06:06:37 +08:00
* feat: 补充任务状态和操作相关的翻译键 - 添加小写版本的状态翻译键:waiting, in progress, success, failed, paused, canceled - 添加 Upload 翻译键 - 更新任务状态显示使用新的翻译键 - 统一翻译键命名规范 * feat: 为法语语言包补充任务状态和操作相关的翻译键 - 添加小写版本的状态翻译键:waiting, in progress, success, failed, paused, canceled - 添加 Upload 翻译键 - 修复 In Progress 参数名(deleting -> processing) - 更新 Success Status 和 Failed Status 翻译 * fix: 对齐所有语言包的翻译键 - 为法语语言包添加 Processing (with count) 键 - 为土耳其语语言包添加 success 和 Success Status 键 - 为中文和英文语言包添加 Success Status 键 - 确保所有语言包(中文、英文、土耳其语、法语)的键完全对齐 - 所有语言包现在都有 880 个键 * feat: 添加国际主流语言支持 新增语言包: - 日语 (ja-JP) - 日本語 - 韩语 (ko-KR) - 한국어 - 德语 (de-DE) - Deutsch - 西班牙语 (es-ES) - Español - 俄语 (ru-RU) - Русский - 葡萄牙语 (pt-BR) - Português - 意大利语 (it-IT) - Italiano 更新内容: - 更新 nuxt.config.ts 添加新语言配置 - 更新 language-switcher.vue 组件添加新语言选项 - 所有新语言包包含 880 个翻译键(目前使用英文作为占位符) 现在支持共 11 种语言:英语、中文、日语、韩语、德语、法语、西班牙语、葡萄牙语、意大利语、俄语、土耳其语 * fix: 暂时隐藏未翻译的语言选项 - 从语言选择器中移除尚未翻译的语言(日语、韩语、德语、西班牙语、葡萄牙语、意大利语、俄语) - 只保留已完整翻译的语言:英语、中文、法语、土耳其语 - 未翻译的语言配置已注释,待翻译完成后可重新启用 这些语言包文件已创建但内容为英文占位符,切换后会显示英文内容 * feat: 完成德语和日语语言包翻译 - 将德语文件 (de-DE.json) 中的所有英文值翻译为德语 - 将日语文件 (ja-JP.json) 中的所有英文值翻译为日语 - 技术术语(如 API、KMS、IAM、MQTT 等)保持英文或使用适当的本地化形式 - 遵循德语和日语的本地化习惯和语言环境 * feat: 完成意大利语、韩语、巴西葡萄牙语和俄语翻译 * feat: 完成西班牙语翻译 * refactor: remove duplicate language options in language-switcher - Generate options array dynamically from languageConfig - Eliminate redundant language definitions - Maintain single source of truth for language data * fix: input shadow
52 lines
1.8 KiB
Vue
52 lines
1.8 KiB
Vue
<template>
|
|
<DropdownMenu>
|
|
<DropdownMenuTrigger as-child>
|
|
<Button variant="ghost">
|
|
<Icon :name="currentLanguage.icon" class="h-4 w-4 shrink-0" />
|
|
</Button>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent class="w-40" align="start">
|
|
<DropdownMenuItem v-for="option in options" :key="option.key" @select="() => handleSelect(option.key)">
|
|
{{ option.label }}
|
|
</DropdownMenuItem>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { Icon } from '#components'
|
|
import { Button } from '@/components/ui/button'
|
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'
|
|
import { computed } from 'vue'
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
const { locale, setLocale } = useI18n()
|
|
|
|
const languageConfig = {
|
|
en: { text: 'English', icon: 'ri:translate' },
|
|
zh: { text: '中文', icon: 'ri:translate-2' },
|
|
fr: { text: 'Français', icon: 'ri:translate' },
|
|
tr: { text: 'Türkçe', icon: 'ri:translate' },
|
|
ja: { text: '日本語', icon: 'ri:translate' },
|
|
ko: { text: '한국어', icon: 'ri:translate' },
|
|
de: { text: 'Deutsch', icon: 'ri:translate' },
|
|
es: { text: 'Español', icon: 'ri:translate' },
|
|
pt: { text: 'Português', icon: 'ri:translate' },
|
|
it: { text: 'Italiano', icon: 'ri:translate' },
|
|
ru: { text: 'Русский', icon: 'ri:translate' },
|
|
} as const
|
|
|
|
const options = Object.entries(languageConfig).map(([key, config]) => ({
|
|
label: config.text,
|
|
key,
|
|
}))
|
|
|
|
const currentLanguage = computed(() => {
|
|
return languageConfig[locale.value as keyof typeof languageConfig] || languageConfig.en
|
|
})
|
|
|
|
const handleSelect = async (key: string) => {
|
|
await setLocale(key as 'en' | 'zh' | 'fr' | 'tr' | 'ja' | 'ko' | 'de' | 'es' | 'pt' | 'it' | 'ru')
|
|
}
|
|
</script>
|