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