Skip to content

Session storage "traps" user in a language #46

@agryson

Description

@agryson

Context

I have a site set up so that English is the default language and French is a second language.

When the user switches to French, /fr/ is inserted just after the root me.net/page -> me.net/fr/page.

With session_store_active : false this behaviour works as expected both ways, changing language will add or remove the /fr/ appropriately.

Issue

However, setting session_store: true "traps" the user in French: trying to change the language to English points the user to me.net/page as expected but a 302 redirect bounces them back to me.net/fr/page.

Changing just the session_store setting and nothing else makes this behaviour systematically repeatable.

Useful data

# /user/config/system.yaml
# ...
absolute_urls: false
default_locale: null
reverse_proxy_setup: false
custom_base_url: ''
intl_enabled: true
session:
  enabled: true
languages:
  supported:
    - en
    - fr
  include_default_lang: false
  translations: true
  translations_fallback: true
  session_store_active: true   # <- Flip this boolean to replicate
  http_accept_language: true
  override_locale: false
  0: en
  1: fr
pages:
  redirect_default_route: false
  redirect_default_code: '302'
  redirect_trailing_slash: true
# ...
# /user/config/plugins/langswitcher.yaml
enabled: true
built_in_css: false
untranslated_pages_behavior: none
<!-- /user/themes/custom-theme/templates/partials/langswitcher.html.twig -->
{% for language in langswitcher.languages %}

    {% set show_language = true %}
    {% if language == langswitcher.current %}
        {% set show_language = false %}
        {% set lang_url = page.url %}
    {% else %}
        {% set base_lang_url = base_url_simple ~ grav.language.getLanguageURLPrefix(language) %}
        {% set lang_url = base_lang_url ~ langswitcher.page_route ~ page.urlExtension %}
        {% set untranslated_pages_behavior = grav.config.plugins.langswitcher.untranslated_pages_behavior %}
        {% if untranslated_pages_behavior != 'none' %}
            {% set translated_page = langswitcher.translated_pages[language] %}
            {% if (not translated_page) or (not translated_page.published) %}
                {% if untranslated_pages_behavior == 'redirect' %}
                    {% set lang_url = base_lang_url ~ '/' %}
                {% elseif untranslated_pages_behavior == 'hide' %}
                    {% set show_language = false %}
                {% endif %}
            {% endif %}
        {% endif %}
        {% set active_class = '' %}
    {% endif %}

    {% if show_language %}
        <a href="{{ lang_url ~ uri.params }}" class="navbar-link language-selection">{{ native_name(language)|capitalize }}</a>
    {% endif %}

{% endfor %}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions