import { createI18n } from 'vue-i18n' import { messages, supportedLocales } from './messages' import type { SupportedLocale } from './messages' const saved = localStorage.getItem('hermes_locale') function normalize(tag: string): SupportedLocale { return tag.toLowerCase().startsWith('zh') ? 'zh' : 'en' } function resolveLocale(saved: string | null): SupportedLocale { if (saved && (supportedLocales as readonly string[]).includes(saved)) { return saved as SupportedLocale } // A locale stored before the zh/en-only consolidation (for example 'zh-TW' // or 'ja') is no longer supported; remap it instead of dropping to English. if (saved) return normalize(saved) const preferred = navigator.languages[0] return preferred ? normalize(preferred) : 'en' } function setHtmlLang(locale: SupportedLocale) { document.documentElement.lang = locale } const locale = resolveLocale(saved) setHtmlLang(locale) export const i18n = createI18n({ legacy: false, locale, fallbackLocale: 'en', messages, }) export function switchLocale(newLocale: string): void { ;(i18n.global.locale as any).value = newLocale setHtmlLang(newLocale as SupportedLocale) }