39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from babel import Locale, UnknownLocaleError
|
|
from django.utils.translation import get_language
|
|
try:
|
|
from threading import local
|
|
except ImportError:
|
|
from django.utils._threading_local import local
|
|
|
|
|
|
__all__ = ['get_current_locale', 'LocaleMiddleware']
|
|
|
|
_thread_locals = local()
|
|
|
|
|
|
def get_current_locale():
|
|
"""Get current locale data outside views.
|
|
|
|
See http://babel.pocoo.org/en/stable/api/core.html#babel.core.Locale
|
|
for Locale objects documentation
|
|
"""
|
|
return getattr(_thread_locals, 'locale', None)
|
|
|
|
|
|
class LocaleMiddleware(object):
|
|
|
|
"""Simple Django middleware that makes available a Babel `Locale` object
|
|
via the `request.locale` attribute.
|
|
"""
|
|
|
|
def process_request(self, request):
|
|
try:
|
|
code = getattr(request, 'LANGUAGE_CODE', get_language())
|
|
locale = Locale.parse(code, sep='-')
|
|
except (ValueError, UnknownLocaleError):
|
|
pass
|
|
else:
|
|
_thread_locals.locale = request.locale = locale
|