2026-04-13 15:15:14 +08:00
|
|
|
import { createI18n } from 'vue-i18n'
|
|
|
|
|
import en from './locales/en'
|
|
|
|
|
import zh from './locales/zh'
|
2026-04-17 09:09:50 +08:00
|
|
|
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'
|
2026-04-13 15:15:14 +08:00
|
|
|
|
|
|
|
|
const saved = localStorage.getItem('hermes_locale')
|
|
|
|
|
const detected = navigator.language.slice(0, 2)
|
|
|
|
|
|
2026-04-17 09:09:50 +08:00
|
|
|
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'
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-13 15:15:14 +08:00
|
|
|
export const i18n = createI18n({
|
|
|
|
|
legacy: false,
|
2026-04-17 09:09:50 +08:00
|
|
|
locale: resolveLocale(saved, detected),
|
2026-04-13 15:15:14 +08:00
|
|
|
fallbackLocale: 'en',
|
2026-04-17 09:09:50 +08:00
|
|
|
messages: { en, zh, ja, ko, fr, es, de, pt },
|
2026-04-13 15:15:14 +08:00
|
|
|
})
|