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 )
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 , 4 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 4 years ago
comment:3 by , 4 years ago
| Cc: | added |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
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 , 3 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:5 by , 10 days ago
| Owner: | changed from to |
|---|
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".
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... 🤔)