diff --git a/apps/stage-pocket/src/modules/i18n.ts b/apps/stage-pocket/src/modules/i18n.ts index f7c1951e2..438770ebe 100644 --- a/apps/stage-pocket/src/modules/i18n.ts +++ b/apps/stage-pocket/src/modules/i18n.ts @@ -1,29 +1,8 @@ import messages from '@proj-airi/i18n/locales' +import { resolveSupportedLocale } from '@proj-airi/i18n' import { createI18n } from 'vue-i18n' -// TODO: Align this bootstrap locale normalization with `@proj-airi/i18n`. -const languageRemap: Record = { - 'zh-CN': 'zh-Hans', - 'zh-TW': 'zh-Hant', - 'zh-HK': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'zh-Hant': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'en-US': 'en', - 'en-GB': 'en', - 'en-AU': 'en', - 'en': 'en', - 'es-ES': 'es', - 'es-MX': 'es', - 'es-AR': 'es', - 'es': 'es', - 'vi': 'vi', - 'vi-VN': 'vi', - 'ru': 'ru', - 'ru-RU': 'ru', - 'fr': 'fr', - 'fr-FR': 'fr', -} - function getLocale() { let language = localStorage.getItem('settings/language') @@ -32,14 +11,7 @@ function getLocale() { language = navigator.language || 'en' } - const languages = Object.keys(messages!) - if (languageRemap[language || 'en'] != null) { - language = languageRemap[language || 'en'] - } - if (language && languages.includes(language)) - return language - - return 'en' + return resolveSupportedLocale(language, Object.keys(messages!)) } export const i18n = createI18n({ diff --git a/apps/stage-tamagotchi/src/renderer/modules/i18n.ts b/apps/stage-tamagotchi/src/renderer/modules/i18n.ts index f8cca15a1..438770ebe 100644 --- a/apps/stage-tamagotchi/src/renderer/modules/i18n.ts +++ b/apps/stage-tamagotchi/src/renderer/modules/i18n.ts @@ -1,38 +1,17 @@ import messages from '@proj-airi/i18n/locales' +import { resolveSupportedLocale } from '@proj-airi/i18n' import { createI18n } from 'vue-i18n' -// TODO: Align this bootstrap locale normalization with `@proj-airi/i18n`. -const languageRemap: Record = { - 'zh-CN': 'zh-Hans', - 'zh-TW': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'zh-HK': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'zh-Hant': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'en-US': 'en', - 'en-GB': 'en', - 'en-AU': 'en', - 'en': 'en', - 'es-ES': 'es', - 'es-MX': 'es', - 'es-AR': 'es', - 'es': 'es', - 'vi': 'vi', - 'vi-VN': 'vi', - 'ru': 'ru', - 'ru-RU': 'ru', -} - function getLocale() { let language = localStorage.getItem('settings/language') - const languages = Object.keys(messages!) - if (languageRemap[language || 'en'] != null) { - language = languageRemap[language || 'en'] + if (!language) { + // Fallback to browser language + language = navigator.language || 'en' } - if (language && languages.includes(language)) - return language - return 'en' + return resolveSupportedLocale(language, Object.keys(messages!)) } export const i18n = createI18n({ diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts index 5347f7b48..90edafe12 100644 --- a/packages/i18n/src/index.ts +++ b/packages/i18n/src/index.ts @@ -13,7 +13,7 @@ export const all = { export const localeRemap: Record = { 'zh-CN': 'zh-Hans', 'zh-TW': 'zh-Hant', - 'zh-HK': 'zh-Hans', + 'zh-HK': 'zh-Hant', 'zh-Hant': 'zh-Hant', 'zh-Hans': 'zh-Hans', 'en': 'en', diff --git a/packages/stage-ui/stories/modules/i18n.ts b/packages/stage-ui/stories/modules/i18n.ts index 7f3619ff4..438770ebe 100644 --- a/packages/stage-ui/stories/modules/i18n.ts +++ b/packages/stage-ui/stories/modules/i18n.ts @@ -1,37 +1,17 @@ import messages from '@proj-airi/i18n/locales' +import { resolveSupportedLocale } from '@proj-airi/i18n' import { createI18n } from 'vue-i18n' -const languageRemap: Record = { - 'zh-CN': 'zh-Hans', - 'zh-TW': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'zh-HK': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'zh-Hant': 'zh-Hans', // TODO: remove this when zh-Hant is supported - 'en-US': 'en', - 'en-GB': 'en', - 'en-AU': 'en', - 'en': 'en', - 'es-ES': 'es', - 'es-MX': 'es', - 'es-AR': 'es', - 'es': 'es', - 'ru': 'ru', - 'ru-RU': 'ru', - 'fr': 'fr', - 'fr-FR': 'fr', -} - function getLocale() { let language = localStorage.getItem('settings/language') - const languages = Object.keys(messages!) - if (languageRemap[language || 'en'] != null) { - language = languageRemap[language || 'en'] + if (!language) { + // Fallback to browser language + language = navigator.language || 'en' } - if (language && languages.includes(language)) - return language - return 'en' + return resolveSupportedLocale(language, Object.keys(messages!)) } export const i18n = createI18n({