Enhanced locale determination logic to support both '-' and '_' as separators, improving flexibility in language and region parsing from browser settings.

This commit is contained in:
Torsten Schulz (local)
2025-11-16 13:42:26 +01:00
parent 60c23bedc0
commit f98288e8c0

View File

@@ -96,13 +96,13 @@ Wt::WLocale App::determineLocaleFromBrowser() const {
std::string lower = tag;
std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
// Sprache und Region trennen
// Sprache und Region trennen (Unterstützung für '-' und '_')
std::string lang = lower;
std::string region;
auto dashPos = lower.find('-');
if (dashPos != std::string::npos) {
lang = lower.substr(0, dashPos);
region = lower.substr(dashPos + 1);
auto sepPos = lower.find_first_of("-_");
if (sepPos != std::string::npos) {
lang = lower.substr(0, sepPos);
region = lower.substr(sepPos + 1);
}
if (lang == "en") {
@@ -140,17 +140,11 @@ Wt::WLocale App::determineLocaleFromBrowser() const {
}
}
// 2. Sonst Accept-Language Header des Browsers auswerten
std::string accept = env_.headerValue("Accept-Language");
if (!accept.empty()) {
std::stringstream ss(accept);
std::string part;
while (std::getline(ss, part, ',')) {
auto localeName = mapLanguageTag(part);
if (!localeName.empty()) {
return makeLocale(localeName);
}
}
// 2. Sonst Locale verwenden, die Wt bereits aus dem Browser/Request ermittelt hat
auto envLocaleName = env_.locale().name(); // z.B. "de_DE", "en_GB"
auto mapped = mapLanguageTag(envLocaleName);
if (!mapped.empty()) {
return makeLocale(mapped);
}
// Fallback: britisches Englisch