diff --git a/src/app.cpp b/src/app.cpp index 58cb7ac..aaea9c0 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -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