From 637ca27332ea6e91456d2d8438a7ce641fb56f08 Mon Sep 17 00:00:00 2001 From: CB <8658089-monospace-dev@users.noreply.gitlab.com> Date: Wed, 8 Apr 2026 12:26:41 +0200 Subject: [PATCH] Fix i18n locale loading for regional codes (de-DE, en-US, etc.) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fixes issue #6257 - Switch load strategy from 'currentOnly' to 'languageOnly' to normalize regional locale codes (de-DE → de) matching available backend files - Simplify fallbackLng to static array since normalization is automatic - Add error handling to i18n.changeLanguage() to prevent crashes on locale load failures --- app/javascript/App.jsx | 9 +++++++-- app/javascript/i18n.jsx | 11 ++--------- 2 files changed, 9 insertions(+), 11 deletions(-) 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;