from django.utils import translation class UserLanguageMiddleware: """Prefer the authenticated user's saved language over browser/cookie language.""" def __init__(self, get_response): self.get_response = get_response def __call__(self, request): user = getattr(request, 'user', None) language = '' if user and user.is_authenticated: try: language = user.preferences.language except Exception: language = '' if language: translation.activate(language) request.LANGUAGE_CODE = language response = self.get_response(request) if language: response.setdefault('Content-Language', language) return response