From 669d8898ac2f2c129481c9fc63d702427e314817 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Tue, 29 Nov 2022 12:37:08 +0400 Subject: [PATCH] Enter UserLangPreferences --- src/server/request_context.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/server/request_context.cpp b/src/server/request_context.cpp index bc99610fd..bf14ee783 100644 --- a/src/server/request_context.cpp +++ b/src/server/request_context.cpp @@ -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 UserLangPreferences; + +UserLangPreferences parseUserLanguagePreferences(const std::string& s) { // TODO: implement properly + const UserLangPreferences defaultPref{{"en", 1}}; if ( s.empty() ) - return "en"; + return defaultPref; for ( const char c : s ) { if ( ! std::isalpha(c) ) { - return "en"; + return defaultPref; } } - return s; + return {{s, 1}}; } } // unnamed namespace @@ -241,7 +250,8 @@ std::string RequestContext::determine_user_language() const } catch(const std::out_of_range&) {} 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&) {} return "en";