| @@ -50,24 +50,35 @@ export const loadLangResources = async (lang: string) => { | |||
| acc[camelCase(NAMESPACES[index])] = mod | |||
| return acc | |||
| }, {} as Record<string, any>) | |||
| return resources | |||
| } | |||
| const getFallbackTranslation = () => { | |||
| const resources = NAMESPACES.reduce((acc, ns, index) => { | |||
| acc[camelCase(NAMESPACES[index])] = require(`./en-US/${ns}`).default | |||
| return acc | |||
| }, {} as Record<string, any>) | |||
| return { | |||
| translation: resources, | |||
| } | |||
| } | |||
| i18n.use(initReactI18next) | |||
| .init({ | |||
| lng: undefined, | |||
| fallbackLng: 'en-US', | |||
| }) | |||
| if (!i18n.isInitialized) { | |||
| i18n.use(initReactI18next) | |||
| .init({ | |||
| lng: undefined, | |||
| fallbackLng: 'en-US', | |||
| resources: { | |||
| 'en-US': getFallbackTranslation(), | |||
| }, | |||
| }) | |||
| } | |||
| export const changeLanguage = async (lng?: string) => { | |||
| const resolvedLng = lng ?? 'en-US' | |||
| const resources = { | |||
| [resolvedLng]: await loadLangResources(resolvedLng), | |||
| } | |||
| const resource = await loadLangResources(resolvedLng) | |||
| if (!i18n.hasResourceBundle(resolvedLng, 'translation')) | |||
| i18n.addResourceBundle(resolvedLng, 'translation', resources[resolvedLng].translation, true, true) | |||
| i18n.addResourceBundle(resolvedLng, 'translation', resource, true, true) | |||
| await i18n.changeLanguage(resolvedLng) | |||
| } | |||