#35034 closed Bug (duplicate)
In some cases i18n set_language does not change url language
Reported by: | Eric Soroos | Owned by: | nobody |
---|---|---|---|
Component: | Internationalization | Version: | 4.2 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Related to #29281, but this time with repro. Possibly also related to #26556.
When posting to /i18n/setlang/
:
- with a referrer in a language that's not the current django cooke language like
/km/admin/foo/bar
, - with a current language cookie of
django_language=en
- and a post content of
next=&language=en
django.urls.translate_urls
attempts to resolve the url using the current request language (in this case, en) and fails, because the url is in a different language (km).
i18n.set_language
then returns the original referrer in the location header of the redirect, and the language doesn't apparently change, confusing the user.
The patch for translate_urls
is approximately:
from django.utils.translation import override, check_for_language, get_language_from_path ... def translate_url(url, lang_code): """ Given a URL (absolute or relative), try to get its translated version in the `lang_code` language (either by i18n_patterns or by translated regex). Return the original URL if no translated version is found. """ parsed = urlsplit(url) try: # URL may be encoded. try: match = resolve(unquote(parsed.path)) except Resolver404: url_lang_code = get_language_from_path(unquote(parsed.path)) if url_lang_code and check_for_language(url_lang_code): with override(url_lang_code): match = resolve(unquote(parsed.path)) else: raise except Resolver404: pass else: ...
https://github.com/django/django/compare/main...EricSoroos:django:35034-translate-url
Change History (5)
comment:1 by , 13 months ago
Description: | modified (diff) |
---|
comment:2 by , 13 months ago
Description: | modified (diff) |
---|
comment:3 by , 13 months ago
Has patch: | unset |
---|---|
Resolution: | → duplicate |
Status: | new → closed |
comment:4 by , 13 months ago
I don't think that this is a strict duplicate, since prefix_default_language
doesn't enter into the code path.
The issue is when the current language cookie and the current url are out of sync. This comment: https://code.djangoproject.com/ticket/28567#comment:14 does have the essential issue though -- translate_url
only only functions on urls from the current language.
comment:5 by , 13 months ago
As far as I'm aware, your issue in described in the https://code.djangoproject.com/ticket/28567#comment:5.
This comment: https://code.djangoproject.com/ticket/28567#comment:14 does have the essential issue though
Feel-free to add a comment to the #28567.
Duplicate of #28567.