Enter UserLangPreferences

This commit is contained in:
Veloman Yunkan 2022-11-29 12:37:08 +04:00 committed by Matthieu Gautier
parent 14f0f79061
commit 669d8898ac
1 changed files with 15 additions and 5 deletions

View File

@ -64,20 +64,29 @@ fullURL2LocalURL(const std::string& full_url, const std::string& rootLocation)
} }
} }
std::string parseAcceptLanguageHeader(const std::string& s) struct LangPreference
{
const std::string lang;
const float preference;
};
typedef std::vector<LangPreference> UserLangPreferences;
UserLangPreferences parseUserLanguagePreferences(const std::string& s)
{ {
// TODO: implement properly // TODO: implement properly
const UserLangPreferences defaultPref{{"en", 1}};
if ( s.empty() ) if ( s.empty() )
return "en"; return defaultPref;
for ( const char c : s ) { for ( const char c : s ) {
if ( ! std::isalpha(c) ) { if ( ! std::isalpha(c) ) {
return "en"; return defaultPref;
} }
} }
return s; return {{s, 1}};
} }
} // unnamed namespace } // unnamed namespace
@ -241,7 +250,8 @@ std::string RequestContext::determine_user_language() const
} catch(const std::out_of_range&) {} } catch(const std::out_of_range&) {}
try { try {
return parseAcceptLanguageHeader(get_header("Accept-Language")); const std::string acceptLanguage = get_header("Accept-Language");
return parseUserLanguagePreferences(acceptLanguage)[0].lang;
} catch(const std::out_of_range&) {} } catch(const std::out_of_range&) {}
return "en"; return "en";