diff --git a/src/boot/lang.js b/src/boot/lang.js index 3b50639..76820fe 100644 --- a/src/boot/lang.js +++ b/src/boot/lang.js @@ -24,10 +24,27 @@ for (const path in modules) { messages[locale] = parsed; } +function resolveLocale(desiredLocale) { + if (messages[desiredLocale]) return desiredLocale; + + const baseLang = desiredLocale.split('-')[0]; + // exact base match (e.g. en) + if (messages[baseLang]) return baseLang; + + // first locale starting with that base (e.g. en-US, en-GB) + const partialMatch = Object.keys(messages).find((l) => l.startsWith(baseLang)); + if (partialMatch) return partialMatch; + + // fallback to English or the first available + return messages['en'] ? 'en' : Object.keys(messages)[0]; +} + +const selectedLocale = resolveLocale(savedLang || systemLocale); + const i18n = createI18n({ legacy: false, // Composition API mode - locale: savedLang || systemLocale, - fallbackLocale: systemLocale, + locale: selectedLocale, + fallbackLocale: resolveLocale(selectedLocale), messages, });