Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

prefix_default_language = False redirect behavior fixes #6851

Merged
merged 13 commits into from May 19, 2021
5 changes: 5 additions & 0 deletions CHANGELOG.rst
Expand Up @@ -2,6 +2,11 @@
Changelog
=========

Unreleased
==================

* Fixed redirect issues when i18n_patterns had prefix_default_language = False


Unreleased
==================
Expand Down
20 changes: 10 additions & 10 deletions cms/utils/i18n.py
Expand Up @@ -193,16 +193,16 @@ def hide_untranslated(language, site_id=None):

def is_language_prefix_patterns_used():
"""
Returns `True` if the `LocaleRegexURLResolver` or `LocalePrefixPattern` is
used at root level of the urlpatterns, else it returns `False`.
"""
return any(
isinstance(
getattr(url_pattern, 'pattern', url_pattern),
LocalePrefixPattern
)
for url_pattern in get_resolver(None).url_patterns
)
Returns `True` if the `LocaleRegexURLResolver` or `LocalePrefixPattern`
is used at root level of the urlpatterns and doesn't have empty
language_prefix, else it returns `False`.
"""
for url_pattern in get_resolver(None).url_patterns:
pattern = getattr(url_pattern, 'pattern', url_pattern)
if isinstance(pattern, LocalePrefixPattern):
if pattern.language_prefix != '':
return True
return False


def is_valid_site_language(language, site_id):
Expand Down
5 changes: 4 additions & 1 deletion cms/views.py
Expand Up @@ -86,7 +86,10 @@ def details(request, slug):
else:
user_languages = get_public_languages(site_id=site.pk)

request_language = get_language_from_request(request, check_path=True)
if is_language_prefix_patterns_used():
request_language = get_language_from_request(request, check_path=True)
else:
request_language = get_default_language_for_site(site.pk)

if not page.is_home and request_language not in user_languages:
# The homepage is treated differently because
Expand Down
9 changes: 7 additions & 2 deletions menus/menu_pool.py
Expand Up @@ -9,7 +9,9 @@
from django.utils.functional import cached_property
from django.utils.module_loading import autodiscover_modules
from django.utils.translation import get_language_from_request, gettext_lazy as _

from cms.utils import get_current_site
from cms.utils.i18n import (get_default_language_for_site,
is_language_prefix_patterns_used)
from cms.utils.conf import get_cms_setting
from cms.utils.moderator import use_draft

Expand Down Expand Up @@ -101,7 +103,10 @@ def __init__(self, pool, request):
# instance lives.
self.menus = pool.get_registered_menus(for_rendering=True)
self.request = request
self.request_language = get_language_from_request(request, check_path=True)
if is_language_prefix_patterns_used():
self.request_language = get_language_from_request(request, check_path=True)
else:
self.request_language = get_default_language_for_site(get_current_site().pk)
self.site = Site.objects.get_current(request)

@property
Expand Down