feat: add 6 new locales (ja, ko, fr, es, de, pt) and UI polish

- Add Japanese, Korean, French, Spanish, German, Portuguese translations
- Improve session active state visibility in both themes
- Static language labels in LanguageSwitch component
- Dark theme: lighten chat input background for better contrast
- Fix system theme listener not toggling back to light

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
ekko
2026-04-17 09:09:50 +08:00
parent 16e07bcc9b
commit dcb477594b
10 changed files with 2728 additions and 12 deletions
+21 -2
View File
@@ -1,13 +1,32 @@
import { createI18n } from 'vue-i18n'
import en from './locales/en'
import zh from './locales/zh'
import ja from './locales/ja'
import ko from './locales/ko'
import fr from './locales/fr'
import es from './locales/es'
import de from './locales/de'
import pt from './locales/pt'
const saved = localStorage.getItem('hermes_locale')
const detected = navigator.language.slice(0, 2)
const supportedLocales = ['en', 'zh', 'ja', 'ko', 'fr', 'es', 'de', 'pt'] as const
type SupportedLocale = (typeof supportedLocales)[number]
function resolveLocale(saved: string | null, detected: string): SupportedLocale {
if (saved && (supportedLocales as readonly string[]).includes(saved)) {
return saved as SupportedLocale
}
if ((supportedLocales as readonly string[]).includes(detected)) {
return detected as SupportedLocale
}
return 'en'
}
export const i18n = createI18n({
legacy: false,
locale: saved || (detected === 'zh' ? 'zh' : 'en'),
locale: resolveLocale(saved, detected),
fallbackLocale: 'en',
messages: { en, zh },
messages: { en, zh, ja, ko, fr, es, de, pt },
})