root/plesonet_multilanguage/trunk/locale.py

Revision 1, 2.2 KB (checked in by 235, 4 years ago)

re-comminting after curios incident with same filenames in upper and lower case`

Line 
1from django.utils.cache import patch_vary_headers
2from django.utils import translation
3from string import split
4from django.conf import settings
5import datetime
6from django.http import HttpResponseNotFound
7from django.template.loader import render_to_string
8from django.template import RequestContext
9
10LANGUAGE_COOKIE_KEY = 'site_language'
11
12class LocaleMiddleware(object):
13
14    def process_request(self, request):
15        # get language from URL
16        # split returns something like this: ['', 'ru', 'blog', '']
17        language = split(request.path, '/')[1]
18        if language is not None and len(language) == 2:
19            if not self.is_language_exists(language):
20                translation.activate(settings.LANGUAGE_CODE)
21                request.LANGUAGE_CODE = translation.get_language()
22                return HttpResponseNotFound(render_to_string("404.html", RequestContext(request)))
23        # get language from cookies
24        if not translation.check_for_language(language):
25            if request.COOKIES.has_key(LANGUAGE_COOKIE_KEY):
26                language = request.COOKIES[LANGUAGE_COOKIE_KEY]
27        # get language from request
28        if not translation.check_for_language(language):
29            language = translation.get_language_from_request(request)
30        # get default language from settings
31        if not translation.check_for_language(language):
32            language = settings.LANGUAGE_CODE
33        translation.activate(language)
34        request.LANGUAGE_CODE = translation.get_language()
35
36    def process_response(self, request, response):
37        patch_vary_headers(response, ('Accept-Language',))
38        response['Content-Language'] = translation.get_language()
39        # set language cookie
40        max_age = 60 * 60 * 24 * 365
41        expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
42        response.set_cookie(key = LANGUAGE_COOKIE_KEY, value = translation.get_language(), max_age = max_age, expires = expires)
43        return response
44   
45    def is_language_exists(self, language):
46        for l in settings.LANGUAGES:
47            if l[0] == language:
48                return True
49        return False
Note: See TracBrowser for help on using the browser.