2016-04-26 19 views
1

Ich habe die Anzahl der Sprachen und Übersetzungen auf meiner Website festgelegt, sie funktionieren gut. Sprachwechselkontrolle auf meiner Seite hinzugefügt.Verwenden Sie Cookie nur für Benutzersprache anstelle von Sitzung öffnen

Switch-Sprache verursacht Einstellung Sitzungstoken für jeden [anonymen] Benutzer. Wie kann ich dies vermeiden und nur Cookie für die Lokalisierung verwenden? Ich meine, benutze keine Session, aber benutze etwas wie "{language: 'en'}" in Cookies, automatisch behandelt?

settings.py Config hat diese Einstellungen neben mit locale Pfaden und etc .:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 

LANGUAGE_COOKIE_NAME = 'language' 

Antwort

2

könnten Sie tun, dass Ihre eigene Middleware durch das Schreiben, das wird:

  • Sprache erstellen Cookie, wenn es nicht bereits existiert.

  • Legen Sie die Sprache entsprechend dem Cookie fest.

So könnte man so etwas schreiben:

from django.utils import translation 

    class LanguageCookieMiddleware(): 

    def process_request(self, request): 
     """ 
     Sets language from the cookie value. 
     """ 

     if request.COOKIES.has_key(COOKIE_NAME): 
      language = request.COOKIES.get(COOKIE_NAME) 
      # You should add here some code to check teh language 
      # variable is safe... 
      translation.activate(language) 
      request.LANGUAGE_CODE = translation.get_language() 

    def process_response(self, request, response): 
     """ 
     Create cookie if not there already. 

     Also deactivates language. 
     (See http://stackoverflow.com/a/13031239/388835) 
     """ 

     if not request.COOKIES.has_key(COOKIE_NAME): 
      response.set_cookie(HTTP_COOKIE_NAME, 
           function_for_language_code_you_want()) 
     translation.deactivate() 
     return response 
+0

ich das gesehen habe: https://github.com/pennersr/django-cooki18n –