diff options
Diffstat (limited to 'django/middleware/locale.py')
-rw-r--r-- | django/middleware/locale.py | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/django/middleware/locale.py b/django/middleware/locale.py index bc1d862574..71db230da2 100644 --- a/django/middleware/locale.py +++ b/django/middleware/locale.py @@ -16,37 +16,28 @@ class LocaleMiddleware(MiddlewareMixin): response_redirect_class = HttpResponseRedirect - def get_fallback_language(self, request): - """ - Return the fallback language for the current request based on the - settings. If LANGUAGE_CODE is a variant not included in the supported - languages, get_fallback_language() will try to fallback to a supported - generic variant. - - Can be overridden to have a fallback language depending on the request, - e.g. based on top level domain. - """ - try: - return translation.get_supported_language_variant(settings.LANGUAGE_CODE) - except LookupError: - return settings.LANGUAGE_CODE - def process_request(self, request): urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF) - i18n_patterns_used, _ = is_language_prefix_patterns_used(urlconf) + ( + i18n_patterns_used, + prefixed_default_language, + ) = is_language_prefix_patterns_used(urlconf) language = translation.get_language_from_request( request, check_path=i18n_patterns_used ) - if not language: - language = self.get_fallback_language(request) - + language_from_path = translation.get_language_from_path(request.path_info) + if ( + not language_from_path + and i18n_patterns_used + and not prefixed_default_language + ): + language = settings.LANGUAGE_CODE translation.activate(language) request.LANGUAGE_CODE = translation.get_language() def process_response(self, request, response): language = translation.get_language() language_from_path = translation.get_language_from_path(request.path_info) - language_from_request = translation.get_language_from_request(request) urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF) ( i18n_patterns_used, @@ -57,7 +48,7 @@ class LocaleMiddleware(MiddlewareMixin): response.status_code == 404 and not language_from_path and i18n_patterns_used - and (prefixed_default_language or language_from_request) + and prefixed_default_language ): # Maybe the language code is missing in the URL? Try adding the # language prefix and redirecting to that URL. |