diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index 538fa2473..544f7e31f 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -754,7 +754,8 @@ std::unique_ptr InternalServer::handle_viewer_settings(const RequestCo const kainjow::mustache::object data{ {"enable_toolbar", m_withTaskbar ? "true" : "false" }, {"enable_link_blocking", m_blockExternalLinks ? "true" : "false" }, - {"enable_library_button", m_withLibraryButton ? "true" : "false" } + {"enable_library_button", m_withLibraryButton ? "true" : "false" }, + {"default_user_language", request.get_user_language() } }; return ContentResponse::build(*this, RESOURCE::templates::viewer_settings_js, data, "application/javascript; charset=utf-8"); } diff --git a/src/server/request_context.cpp b/src/server/request_context.cpp index 9e0b965c0..91ff7a72d 100644 --- a/src/server/request_context.cpp +++ b/src/server/request_context.cpp @@ -202,21 +202,12 @@ std::string RequestContext::get_user_language() const return userlang.lang; } -bool RequestContext::user_language_comes_from_cookie() const -{ - return userlang.selectedBy == UserLanguage::SelectorKind::COOKIE; -} - RequestContext::UserLanguage RequestContext::determine_user_language() const { try { return {UserLanguage::SelectorKind::QUERY_PARAM, get_argument("userlang")}; } catch(const std::out_of_range&) {} - try { - return {UserLanguage::SelectorKind::COOKIE, cookies.at("userlang")}; - } catch(const std::out_of_range&) {} - try { const std::string acceptLanguage = get_header("Accept-Language"); const auto userLangPrefs = parseUserLanguagePreferences(acceptLanguage); diff --git a/src/server/request_context.h b/src/server/request_context.h index 081b699b9..d5ab7b515 100644 --- a/src/server/request_context.h +++ b/src/server/request_context.h @@ -119,15 +119,12 @@ class RequestContext { std::string get_user_language() const; std::string get_requested_format() const; - bool user_language_comes_from_cookie() const; - private: // types struct UserLanguage { enum SelectorKind { QUERY_PARAM, - COOKIE, ACCEPT_LANGUAGE_HEADER, DEFAULT }; diff --git a/src/server/response.cpp b/src/server/response.cpp index db20a2fb4..bc8c85e51 100644 --- a/src/server/response.cpp +++ b/src/server/response.cpp @@ -387,13 +387,6 @@ MHD_Result Response::send(const RequestContext& request, MHD_Connection* connect MHD_add_response_header(response, p.first.c_str(), p.second.c_str()); } - if ( ! request.user_language_comes_from_cookie() ) { - const std::string cookie = "userlang=" + request.get_user_language() - + ";Path=" + request.get_root_path() - + ";Max-Age=31536000"; - MHD_add_response_header(response, MHD_HTTP_HEADER_SET_COOKIE, cookie.c_str()); - } - if (m_returnCode == MHD_HTTP_OK && m_byteRange.kind() == ByteRange::RESOLVED_PARTIAL_CONTENT) m_returnCode = MHD_HTTP_PARTIAL_CONTENT; diff --git a/static/skin/i18n.js b/static/skin/i18n.js index 53c11c7f9..3ccf85c32 100644 --- a/static/skin/i18n.js +++ b/static/skin/i18n.js @@ -69,30 +69,19 @@ function $t(msgId, params={}) { } } -function getCookie(cookieName) { - const name = cookieName + "="; - let result; - decodeURIComponent(document.cookie).split('; ').forEach(val => { - if (val.indexOf(name) === 0) { - result = val.substring(name.length); - } - }); - return result; -} - - const DEFAULT_UI_LANGUAGE = 'en'; Translations.load(DEFAULT_UI_LANGUAGE, /*asDefault=*/true); function getUserLanguage() { return new URLSearchParams(window.location.search).get('userlang') - || getCookie('userlang') + || window.localStorage.getItem('userlang') + || viewerSettings.defaultUserLanguage || DEFAULT_UI_LANGUAGE; } function setUserLanguage(lang, callback) { - setPermanentGlobalCookie('userlang', lang); + window.localStorage.setItem('userlang', lang); Translations.load(lang); Translations.whenReady(callback); } diff --git a/static/skin/index.js b/static/skin/index.js index aa84bbf77..b93253aaa 100644 --- a/static/skin/index.js +++ b/static/skin/index.js @@ -46,7 +46,7 @@ window.modalUILanguageSelector.close(); const s = document.getElementById("ui_language"); const lang = s.options[s.selectedIndex].value; - setPermanentGlobalCookie('userlang', lang); + localStorage.setItem('userlang', lang); window.location.reload(); } @@ -585,11 +585,6 @@ setInterval(updateNavVisibilityState, 250); }; - // required by i18n.js:setUserLanguage() - window.setPermanentGlobalCookie = function(name, value) { - document.cookie = `${name}=${value};path=${root};max-age=31536000`; - } - window.onload = () => { setUserLanguage(getUserLanguage(), onload); } })(); diff --git a/static/skin/viewer.js b/static/skin/viewer.js index ea47e532f..f9b5ba88e 100644 --- a/static/skin/viewer.js +++ b/static/skin/viewer.js @@ -549,7 +549,3 @@ function finishViewerSetupOnceTranslationsAreLoaded() viewerSetupComplete = true; } - -function setPermanentGlobalCookie(name, value) { - document.cookie = `${name}=${value};path=${root};max-age=31536000`; -} diff --git a/static/templates/index.html b/static/templates/index.html index b94971dbd..ec887ab55 100644 --- a/static/templates/index.html +++ b/static/templates/index.html @@ -37,6 +37,7 @@ src: url("{{root}}/skin/fonts/Roboto.ttf?KIWIXCACHEID") format("truetype"); } + diff --git a/static/templates/viewer_settings.js b/static/templates/viewer_settings.js index 0ccf6579f..37669bb17 100644 --- a/static/templates/viewer_settings.js +++ b/static/templates/viewer_settings.js @@ -1,5 +1,6 @@ const viewerSettings = { toolbarEnabled: {{enable_toolbar}}, linkBlockingEnabled: {{enable_link_blocking}}, - libraryButtonEnabled: {{enable_library_button}} + libraryButtonEnabled: {{enable_library_button}}, + defaultUserLanguage: "{{default_user_language}}" } diff --git a/static/viewer.html b/static/viewer.html index fc49f6ac7..392e26243 100644 --- a/static/viewer.html +++ b/static/viewer.html @@ -34,12 +34,12 @@