Merge pull request #1821 from Bouke/tickets/14170
#14170 -- Reset i18n cache when settings changed
This commit is contained in:
commit
cb2c3ce154
|
@ -427,7 +427,6 @@ class TransRealMixin(object):
|
||||||
trans_real._translations = {}
|
trans_real._translations = {}
|
||||||
trans_real._active = local()
|
trans_real._active = local()
|
||||||
trans_real._default = None
|
trans_real._default = None
|
||||||
trans_real._accepted = {}
|
|
||||||
trans_real._checked_languages = {}
|
trans_real._checked_languages = {}
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
|
|
@ -11,6 +11,8 @@ from importlib import import_module
|
||||||
from threading import local
|
from threading import local
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
|
from django.dispatch import receiver
|
||||||
|
from django.test.signals import setting_changed
|
||||||
from django.utils.encoding import force_str, force_text
|
from django.utils.encoding import force_str, force_text
|
||||||
from django.utils.functional import memoize
|
from django.utils.functional import memoize
|
||||||
from django.utils._os import upath
|
from django.utils._os import upath
|
||||||
|
@ -47,6 +49,17 @@ accept_language_re = re.compile(r'''
|
||||||
language_code_prefix_re = re.compile(r'^/([\w-]+)(/|$)')
|
language_code_prefix_re = re.compile(r'^/([\w-]+)(/|$)')
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(setting_changed)
|
||||||
|
def reset_cache(**kwargs):
|
||||||
|
"""
|
||||||
|
Reset global state when LANGUAGES setting has been changed, as some
|
||||||
|
languages should no longer be accepted.
|
||||||
|
"""
|
||||||
|
if kwargs['setting'] == 'LANGUAGES':
|
||||||
|
global _accepted
|
||||||
|
_accepted = {}
|
||||||
|
|
||||||
|
|
||||||
def to_locale(language, to_lower=False):
|
def to_locale(language, to_lower=False):
|
||||||
"""
|
"""
|
||||||
Turns a language name (en-us) into a locale name (en_US). If 'to_lower' is
|
Turns a language name (en-us) into a locale name (en_US). If 'to_lower' is
|
||||||
|
|
|
@ -15,7 +15,7 @@ from django.http import (Http404, HttpResponse, HttpResponseRedirect,
|
||||||
from django.template import loader, Template, Context, TemplateDoesNotExist
|
from django.template import loader, Template, Context, TemplateDoesNotExist
|
||||||
from django.utils.http import http_date, parse_http_date
|
from django.utils.http import http_date, parse_http_date
|
||||||
from django.utils.six.moves.urllib.parse import unquote
|
from django.utils.six.moves.urllib.parse import unquote
|
||||||
from django.utils.translation import ugettext as _, ugettext_noop
|
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||||
|
|
||||||
|
|
||||||
def serve(request, path, document_root=None, show_indexes=False):
|
def serve(request, path, document_root=None, show_indexes=False):
|
||||||
|
@ -94,7 +94,7 @@ DEFAULT_DIRECTORY_INDEX_TEMPLATE = """
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
"""
|
"""
|
||||||
template_translatable = ugettext_noop("Index of %(directory)s")
|
template_translatable = ugettext_lazy("Index of %(directory)s")
|
||||||
|
|
||||||
|
|
||||||
def directory_index(path, fullpath):
|
def directory_index(path, fullpath):
|
||||||
|
|
|
@ -940,6 +940,19 @@ class MiscTests(TransRealMixin, TestCase):
|
||||||
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 1})), '%(percent)s% represents 1 object')
|
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 1})), '%(percent)s% represents 1 object')
|
||||||
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), '%(percent)s% represents 4 objects')
|
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), '%(percent)s% represents 4 objects')
|
||||||
|
|
||||||
|
def test_cache_resetting(self):
|
||||||
|
"""
|
||||||
|
#14170 after setting LANGUAGE, cache should be cleared and languages
|
||||||
|
previously valid should not be used.
|
||||||
|
"""
|
||||||
|
g = get_language_from_request
|
||||||
|
r = self.rf.get('/')
|
||||||
|
r.COOKIES = {}
|
||||||
|
r.META = {'HTTP_ACCEPT_LANGUAGE': 'pt-br'}
|
||||||
|
self.assertEqual('pt-br', g(r))
|
||||||
|
with self.settings(LANGUAGES=(('en', 'English'),)):
|
||||||
|
self.assertNotEqual('pt-br', g(r))
|
||||||
|
|
||||||
|
|
||||||
class ResolutionOrderI18NTests(TransRealMixin, TestCase):
|
class ResolutionOrderI18NTests(TransRealMixin, TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue