From d39a583127227e0e804653fea3996122ef0e1ca0 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 24 Mar 2026 21:18:43 +0100 Subject: [PATCH 1/3] fixed: locale inference --- Foundation/CPLocale.j | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Foundation/CPLocale.j b/Foundation/CPLocale.j index c506ce299..493c62894 100644 --- a/Foundation/CPLocale.j +++ b/Foundation/CPLocale.j @@ -99,13 +99,21 @@ var sharedSystemLocale = nil, if (language) { - // Browsers use locale strings such as "en-US", but CPLocale uses "en_US". - language = language.replace("-", "_").substring(0, 5); - // Some browsers have "en_us" at this point, while we want "en_US". - language = language.substring(0, 3).toLowerCase() + language.substring(3, 5).toUpperCase(); + // Split the BCP 47 tag into parts (e.g.,["zh", "Hans", "CN"] or ["en", "US"] or ["fr"]) + var parts = language.split("-"); - if ([availableLocaleIdentifiers indexOfObject:language] !== CPNotFound) - localeIdentifier = language; + if (parts.length > 1) + { + // Grab the language and the LAST part (the region code) + var langCode = parts[0].toLowerCase(); + var regionCode = parts[parts.length - 1].toUpperCase(); + language = langCode + "_" + regionCode; + } + else + { + // It's just a 2-letter code, keep it as is (or map it if your app strictly requires xx_XX) + language = parts[0].toLowerCase(); + } } } From 63e3f6c3fc98fd0c40b9aa3f05a5ccfbc873ea21 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 24 Mar 2026 21:33:24 +0100 Subject: [PATCH 2/3] fixed single region of FF --- Foundation/CPLocale.j | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/Foundation/CPLocale.j b/Foundation/CPLocale.j index 493c62894..d27e20652 100644 --- a/Foundation/CPLocale.j +++ b/Foundation/CPLocale.j @@ -90,7 +90,7 @@ var sharedSystemLocale = nil, if (!sharedCurrentLocale) { var localeIdentifier = @"en_US", - language; + language; if (typeof navigator !== "undefined") { @@ -104,15 +104,32 @@ var sharedSystemLocale = nil, if (parts.length > 1) { - // Grab the language and the LAST part (the region code) + // Chrome behavior: e.g., "de-DE" or "en-US" var langCode = parts[0].toLowerCase(); var regionCode = parts[parts.length - 1].toUpperCase(); - language = langCode + "_" + regionCode; + + // Update localeIdentifier! + localeIdentifier = langCode + "_" + regionCode; } else { - // It's just a 2-letter code, keep it as is (or map it if your app strictly requires xx_XX) - language = parts[0].toLowerCase(); + // Firefox behavior: e.g., "de", "fr", "en" + var langCode = parts[0].toLowerCase(); + + // Create a mapping of 2-letter language codes to default region codes + var defaultRegions = { + "de": "DE", + "en": "US", + "es": "ES", + "fr": "FR", + "sv": "SE" + }; + + // Look up the default region, or fallback to the uppercased language code (e.g. "it" -> "IT") + var regionCode = defaultRegions[langCode] || langCode.toUpperCase(); + + // Update localeIdentifier! + localeIdentifier = langCode + "_" + regionCode; } } } From c7e89d301861a4174245e4d9be950f8d8410bea1 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Tue, 24 Mar 2026 21:34:39 +0100 Subject: [PATCH 3/3] formatting --- Foundation/CPLocale.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Foundation/CPLocale.j b/Foundation/CPLocale.j index d27e20652..a51bb04b0 100644 --- a/Foundation/CPLocale.j +++ b/Foundation/CPLocale.j @@ -90,7 +90,7 @@ var sharedSystemLocale = nil, if (!sharedCurrentLocale) { var localeIdentifier = @"en_US", - language; + language; if (typeof navigator !== "undefined") {