diff --git a/app/javascript/App.jsx b/app/javascript/App.jsx index f8a33f3400..4ea9f49641 100644 --- a/app/javascript/App.jsx +++ b/app/javascript/App.jsx @@ -85,8 +85,13 @@ export default function App() { // i18n const { i18n } = useTranslation(); useEffect(() => { - i18n.changeLanguage(currentUser?.language); - }, [currentUser?.language]); + if (currentUser?.language) { + i18n.changeLanguage(currentUser.language).catch(() => { + // Silently fall back to default language if change fails + console.warn(`Failed to load language: ${currentUser.language}`); + }); + } + }, [currentUser?.language, i18n]); // Greenlight V3 brand-color theming const { isLoading, data: brandColors } = useSiteSetting(['PrimaryColor', 'PrimaryColorLight']); diff --git a/app/javascript/i18n.jsx b/app/javascript/i18n.jsx index 9856fc8b36..a1497de922 100644 --- a/app/javascript/i18n.jsx +++ b/app/javascript/i18n.jsx @@ -25,14 +25,7 @@ i18next backend: { loadPath: `${process.env.RELATIVE_URL_ROOT}/api/v1/locales/{{lng}}.json`, }, - load: 'currentOnly', - fallbackLng: (locale) => { - const fallbacks = []; - if (locale?.indexOf('-') > -1) { - fallbacks.push(locale.split('-')[0]); - } - fallbacks.push('en'); - return fallbacks; - }, + load: 'languageOnly', + fallbackLng: ['en'], }); export default i18next;