mirror of
https://github.com/django/django.git
synced 2025-08-03 02:23:12 +00:00
Fixed #22120 -- Documented persistent activation of languages and cleaned up language session key use
This commit is contained in:
parent
09b725f51b
commit
8cd32f0965
10 changed files with 63 additions and 22 deletions
|
@ -5,6 +5,7 @@ from django.apps import apps as django_apps
|
|||
from django.conf import settings
|
||||
from django.core.exceptions import ImproperlyConfigured, PermissionDenied
|
||||
from django.utils.module_loading import import_string
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
from django.middleware.csrf import rotate_token
|
||||
|
||||
from .signals import user_logged_in, user_logged_out, user_login_failed
|
||||
|
@ -108,12 +109,12 @@ def logout(request):
|
|||
|
||||
# remember language choice saved to session
|
||||
# for backwards compatibility django_language is also checked (remove in 1.8)
|
||||
language = request.session.get('_language', request.session.get('django_language'))
|
||||
language = request.session.get(LANGUAGE_SESSION_KEY, request.session.get('django_language'))
|
||||
|
||||
request.session.flush()
|
||||
|
||||
if language is not None:
|
||||
request.session['_language'] = language
|
||||
request.session[LANGUAGE_SESSION_KEY] = language
|
||||
|
||||
if hasattr(request, 'user'):
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
|
|
|
@ -14,6 +14,7 @@ from django.http import QueryDict, HttpRequest
|
|||
from django.utils.encoding import force_text
|
||||
from django.utils.http import urlquote
|
||||
from django.utils.six.moves.urllib.parse import urlparse, ParseResult
|
||||
from django.utils.translation import LANGUAGE_SESSION_KEY
|
||||
from django.utils._os import upath
|
||||
from django.test import TestCase, override_settings
|
||||
from django.test.utils import patch_logger
|
||||
|
@ -718,12 +719,12 @@ class LogoutTest(AuthViewsTestCase):
|
|||
# Create a new session with language
|
||||
engine = import_module(settings.SESSION_ENGINE)
|
||||
session = engine.SessionStore()
|
||||
session['_language'] = 'pl'
|
||||
session[LANGUAGE_SESSION_KEY] = 'pl'
|
||||
session.save()
|
||||
self.client.cookies[settings.SESSION_COOKIE_NAME] = session.session_key
|
||||
|
||||
self.client.get('/logout/')
|
||||
self.assertEqual(self.client.session['_language'], 'pl')
|
||||
self.assertEqual(self.client.session[LANGUAGE_SESSION_KEY], 'pl')
|
||||
|
||||
|
||||
@skipIfCustomUser
|
||||
|
|
|
@ -21,6 +21,7 @@ __all__ = [
|
|||
'npgettext', 'npgettext_lazy',
|
||||
]
|
||||
|
||||
LANGUAGE_SESSION_KEY = '_language'
|
||||
|
||||
class TranslatorCommentWarning(SyntaxWarning):
|
||||
pass
|
||||
|
|
|
@ -18,7 +18,7 @@ from django.utils._os import upath
|
|||
from django.utils.safestring import mark_safe, SafeData
|
||||
from django.utils import six, lru_cache
|
||||
from django.utils.six import StringIO
|
||||
from django.utils.translation import TranslatorCommentWarning, trim_whitespace
|
||||
from django.utils.translation import TranslatorCommentWarning, trim_whitespace, LANGUAGE_SESSION_KEY
|
||||
|
||||
|
||||
# Translations are cached in a dictionary for every language+app tuple.
|
||||
|
@ -478,7 +478,7 @@ def get_language_from_request(request, check_path=False):
|
|||
|
||||
if hasattr(request, 'session'):
|
||||
# for backwards compatibility django_language is also checked (remove in 1.8)
|
||||
lang_code = request.session.get('_language', request.session.get('django_language'))
|
||||
lang_code = request.session.get(LANGUAGE_SESSION_KEY, request.session.get('django_language'))
|
||||
if lang_code in supported and lang_code is not None and check_for_language(lang_code):
|
||||
return lang_code
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ from django import http
|
|||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
from django.template import Context, Template
|
||||
from django.utils.translation import check_for_language, to_locale, get_language
|
||||
from django.utils.translation import check_for_language, to_locale, get_language, LANGUAGE_SESSION_KEY
|
||||
from django.utils.encoding import smart_text
|
||||
from django.utils.formats import get_format_modules, get_format
|
||||
from django.utils._os import upath
|
||||
|
@ -36,7 +36,7 @@ def set_language(request):
|
|||
lang_code = request.POST.get('language', None)
|
||||
if lang_code and check_for_language(lang_code):
|
||||
if hasattr(request, 'session'):
|
||||
request.session['_language'] = lang_code
|
||||
request.session[LANGUAGE_SESSION_KEY] = lang_code
|
||||
else:
|
||||
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
|
||||
return response
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue