diff --git a/opac/webapp/main/views.py b/opac/webapp/main/views.py index 3d6a8d9e9..8c5da197e 100644 --- a/opac/webapp/main/views.py +++ b/opac/webapp/main/views.py @@ -73,7 +73,8 @@ def add_collection_to_g(): @main.before_app_request def add_langs(): - session["langs"] = current_app.config.get("LANGUAGES") + g.langs = current_app.config.get("LANGUAGES") + g.lang = get_locale() @main.after_request @@ -82,13 +83,7 @@ def add_header(response): "CACHE_CONTROL_MAX_AGE_HEADER" ) response.headers["x-content-type-options"] = "nosniff" - return response - - -@main.after_request -def add_language_code(response): - language = session.get("lang", get_locale()) - response.set_cookie("language", language) + response.vary.add("Accept-Language") return response @@ -101,7 +96,7 @@ def add_forms_to_g(): @main.before_app_request def add_scielo_org_config_to_g(): - language = session.get("lang", get_locale()) + language = get_locale() scielo_org_links = { # if language doesnt exists set the 'en' to SciELO ORG links. key: url.get(language, "en") @@ -113,17 +108,18 @@ def add_scielo_org_config_to_g(): @babel.localeselector def get_locale(): langs = current_app.config.get("LANGUAGES") - lang_from_headers = request.accept_languages.best_match(list(langs.keys())) - if "lang" not in list(session.keys()): - session["lang"] = lang_from_headers + # If user explicitly set language via set_locale, use that + if "lang" in session: + return session["lang"] - if not lang_from_headers and not session["lang"]: - # Caso não seja possível detectar o idioma e não tenhamos a chave lang - # no seção, fixamos o idioma padrão. - session["lang"] = current_app.config.get("BABEL_DEFAULT_LOCALE") + # Otherwise, use Accept-Language header + lang_from_headers = request.accept_languages.best_match(list(langs.keys())) + if lang_from_headers: + return lang_from_headers - return session["lang"] + # Default locale + return current_app.config.get("BABEL_DEFAULT_LOCALE") @main.route("/set_locale//") @@ -151,16 +147,13 @@ def get_lang_from_session(): Tenta retornar o idioma da seção, caso não consiga retorna BABEL_DEFAULT_LOCALE. """ - try: - return session["lang"] - except KeyError: - return current_app.config.get("BABEL_DEFAULT_LOCALE") + return get_locale() @main.route("/") @cache.cached(key_prefix=cache_key_with_lang) def index(): - language = session.get("lang", get_locale()) + language = get_locale() news = controllers.get_latest_news_by_lang(language) tweets = controllers.get_collection_tweets() @@ -261,7 +254,7 @@ def collection_list_thematic(): @main.route("/journals/feed/") @cache.cached(key_prefix=cache_key_with_lang) def collection_list_feed(): - language = session.get("lang", get_locale()) + language = get_locale() collection = controllers.get_current_collection() title = "SciELO - %s - %s" % ( @@ -327,7 +320,7 @@ def collection_list_feed(): @main.route("/about/", methods=["GET"]) @cache.cached(key_prefix=cache_key_with_lang_with_qs) def about_collection(slug_name=None): - language = session.get("lang", get_locale()) + language = get_locale() context = {} page = None @@ -486,7 +479,7 @@ def journal_detail(url_seg): abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # todo: ajustar para que seja só noticias relacionadas ao periódico - language = session.get("lang", get_locale()) + language = get_locale() news = controllers.get_latest_news_by_lang(language) # Press releases @@ -576,7 +569,7 @@ def journal_feed(url_seg): subtitle=utils.get_label_issue(last_issue), ) - feed_language = session.get("lang", get_locale()) + feed_language = get_locale() feed_language = feed_language[:2].lower() for article in articles: @@ -607,7 +600,7 @@ def journal_feed(url_seg): @main.route("/journal//about/", methods=["GET"]) @cache.cached(key_prefix=cache_key_with_lang) def about_journal(url_seg): - language = session.get("lang", get_locale()) + language = get_locale() journal = controllers.get_journal_by_url_seg(url_seg) content = None @@ -834,7 +827,7 @@ def issue_grid(url_seg): abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # idioma da sessão - language = session.get("lang", get_locale()) + language = get_locale() # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "-order" issues_data = controllers.get_issues_for_grid_by_jid(journal.id, is_public=True) @@ -881,7 +874,7 @@ def issue_toc(url_seg, url_seg_issue): filter_section_enable = bool(current_app.config["FILTER_SECTION_ENABLE"]) # idioma da sessão - language = session.get("lang", get_locale()) + language = get_locale() # obtém o issue issue = controllers.get_issue_by_url_seg(url_seg, url_seg_issue) @@ -1045,7 +1038,7 @@ def issue_feed(url_seg, url_seg_issue): subtitle=utils.get_label_issue(issue), ) - feed_language = session.get("lang", get_locale()) + feed_language = get_locale() for article in articles: # ######### TODO: Revisar ######### diff --git a/opac/webapp/templates/admin/opac_base.html b/opac/webapp/templates/admin/opac_base.html index a71426188..2bc211f32 100644 --- a/opac/webapp/templates/admin/opac_base.html +++ b/opac/webapp/templates/admin/opac_base.html @@ -30,7 +30,7 @@ {% for k,v in config.LANGUAGES.items() %} - {% if k == session['lang'] %} + {% if k == g.lang %} {{ v }} {% else %} {{ v }} diff --git a/opac/webapp/templates/article/includes/alternative_header.html b/opac/webapp/templates/article/includes/alternative_header.html index 9c12e30e9..bc5059273 100644 --- a/opac/webapp/templates/article/includes/alternative_header.html +++ b/opac/webapp/templates/article/includes/alternative_header.html @@ -45,7 +45,7 @@