Opened 4 years ago

Last modified 10 days ago

#33668 assigned Bug

i18n set_language not working in Safari

Reported by: yopiti Owned by: James Beard
Component: Internationalization Version: 4.0
Severity: Normal Keywords:
Cc: Carlton Gibson Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by yopiti)

Trying to implement a session / cookie based translation selector.

This code correctly sets the language in Chrome (100) & Firefox (99.0.1), but not in Safari (15.4).

{% load i18n %}

<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

Request is made, its redirected to /i18n/setlang/ and back to the original page, but not switching language.

Change History (5)

comment:1 by yopiti, 4 years ago

Description: modified (diff)

comment:2 by Carlton Gibson, 4 years ago

This might be the intelligent tracking protection — it doesn't send the cookies after a-certain-number of redirects. 🤔

Can I ask: if you refresh, is the language then-set? This sometimes happens with logins, but when I've seen it, the login has worked, it's just that the cookie wasn't sent for the final redirect request, and so refreshing then sends it.

Was this working previously? Or are you only implementing it now? (Not sure if this is something we'd be able to work around... — short of Use less internal redirects... 🤔)

comment:3 by Carlton Gibson, 4 years ago

Cc: Carlton Gibson added
Triage Stage: UnreviewedAccepted

I'm going to Accept as The set_language redirect view docs have this exact form, so we'll need to review if a note or such is needed even if we can't suggest a different flow.

comment:4 by Eknath Baravkar, 3 years ago

Owner: changed from nobody to Eknath Baravkar
Status: newassigned

comment:5 by James Beard, 10 days ago

Owner: changed from Eknath Baravkar to James Beard

Tried unsuccessfully to reproduce this behaviour with a minimal app using the form markup mentioned. Changing the language and submitting the form did save the requested language to django_language cookie using Safari and other browsers.

Test app used Python 3.8 and Django 4.0.10. Only had Safari 15.6 to test with, so tried with 14.1.3 as well with the cookie still being saved successfully.

Without further info it's impossible to know how "but not switching language" was determined. For example, if was just that the drop down didn't change that could have been caused by a string mismatch when deciding which option to mark selected.

If nothing noted by original reporter or anyone else in a month or so plan to resolve as "works for me".

Note: See TracTickets for help on using tickets.
Back to Top