mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #21389 -- Accept most valid language codes
By removing the 'supported' keyword from the detection methods and only relying on a cached settings.LANGUAGES, the speed of said methods has been improved; around 4x raw performance. This allows us to stop checking Python's incomplete list of locales, and rely on a less restrictive regular expression for accepting certain locales. HTTP Accept-Language is defined as being case-insensitive, based on this fact extra performance improvements have been made; it wouldn't make sense to check for case differences.
This commit is contained in:
committed by
Claude Paroz
parent
48a8b714d4
commit
2bab9d6d9e
@@ -1,7 +1,5 @@
|
||||
"This is the locale selecting middleware that will look at accept headers"
|
||||
|
||||
from collections import OrderedDict
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import (is_valid_path, get_resolver,
|
||||
LocaleRegexURLResolver)
|
||||
@@ -21,7 +19,6 @@ class LocaleMiddleware(object):
|
||||
response_redirect_class = HttpResponseRedirect
|
||||
|
||||
def __init__(self):
|
||||
self._supported_languages = OrderedDict(settings.LANGUAGES)
|
||||
self._is_language_prefix_patterns_used = False
|
||||
for url_pattern in get_resolver(None).url_patterns:
|
||||
if isinstance(url_pattern, LocaleRegexURLResolver):
|
||||
@@ -37,9 +34,7 @@ class LocaleMiddleware(object):
|
||||
|
||||
def process_response(self, request, response):
|
||||
language = translation.get_language()
|
||||
language_from_path = translation.get_language_from_path(
|
||||
request.path_info, supported=self._supported_languages
|
||||
)
|
||||
language_from_path = translation.get_language_from_path(request.path_info)
|
||||
if (response.status_code == 404 and not language_from_path
|
||||
and self.is_language_prefix_patterns_used()):
|
||||
urlconf = getattr(request, 'urlconf', None)
|
||||
|
||||
Reference in New Issue
Block a user