diff --git a/frontend/shared/i18n/lobby-loader.ts b/frontend/shared/i18n/lobby-loader.ts index 70a4ba0..7b4579d 100644 --- a/frontend/shared/i18n/lobby-loader.ts +++ b/frontend/shared/i18n/lobby-loader.ts @@ -8,7 +8,7 @@ export const DEFAULT_LOCALE = lobbyCatalog.locales.default as SupportedLocale; export const SUPPORTED_LOCALES = lobbyCatalog.locales.supported as readonly SupportedLocale[]; export function normalizeLocale(rawLocale?: string | null): SupportedLocale { - const locale = (rawLocale ?? '').trim().toLowerCase(); + const locale = (rawLocale ?? '').trim().toLowerCase().replace(/_/g, '-'); if ((SUPPORTED_LOCALES as readonly string[]).includes(locale)) { return locale as SupportedLocale; } diff --git a/frontend/tests/lobby-loader.parity.test.ts b/frontend/tests/lobby-loader.parity.test.ts index 896c1a0..91bd038 100644 --- a/frontend/tests/lobby-loader.parity.test.ts +++ b/frontend/tests/lobby-loader.parity.test.ts @@ -16,7 +16,9 @@ describe('shared lobby i18n loader parity', () => { it('normalizes browser-style locale tags to supported keyspace locales', () => { expect(normalizeLocale('da-DK')).toBe('da'); + expect(normalizeLocale('da_DK')).toBe('da'); expect(normalizeLocale('en-US')).toBe('en'); + expect(normalizeLocale('en_US')).toBe('en'); expect(normalizeLocale('fr-FR')).toBe('en'); });