import { createI18n } from 'vue-i18n' import en from './en.json' import zhTW from './zh-TW.json' import ja from './ja.json' export type MessageSchema = typeof en const supportedLanguages = { 'en': en, 'zh-TW': zhTW, 'ja': ja, } function detectInitialLanguage(): string { const saved = localStorage.getItem('app_language') if (saved && saved in supportedLanguages) { return saved } if (saved === 'auto') { return detectOSLanguage() } return 'en' } function detectOSLanguage(): string { let osLang = 'en' try { if ((window as any).__TAURI__) { const locale = (window as any).__TAURI__?.os?.getLocale?.() if (locale) osLang = locale } else { osLang = navigator.language || 'en' } } catch (e) { console.error('Language detection failed:', e) } if (osLang.startsWith('zh-TW') || osLang.startsWith('zh-Hant')) { return 'zh-TW' } else if (osLang.startsWith('zh-CN') || osLang.startsWith('zh-Hans')) { return 'zh-CN' } else if (osLang.startsWith('ja')) { return 'ja' } else if (osLang.startsWith('ko')) { return 'ko' } return 'en' } const i18n = createI18n<[MessageSchema], 'en' | 'zh-TW' | 'ja'>({ legacy: false, locale: detectInitialLanguage(), fallbackLocale: 'en', messages: supportedLanguages as any, missingWarn: false, fallbackWarn: false, }) export function changeLanguage(lang: string) { if (lang === 'auto') { localStorage.setItem('app_language', 'auto') const detected = detectOSLanguage() i18n.global.locale = detected as any } else { localStorage.setItem('app_language', lang) i18n.global.locale = lang as any } } export function getCurrentLanguage(): string { return i18n.global.locale as string } export { detectOSLanguage } export default i18n