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:
26
src/app.cpp
26
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
|
||||
|
||||
Reference in New Issue
Block a user