Source code for ferrosoft.apps.ferrobase.middleware.language

from asgiref.sync import iscoroutinefunction, markcoroutinefunction
from django.utils import translation


[docs] class UserLanguageMiddleware: """Middleware that activates the authenticated user's preferred language for each request. Reads ``user.language.iso_code`` and calls ``django.utils.translation.activate`` so that all subsequent ``gettext`` calls in the request–response cycle use the user's chosen locale. Unauthenticated or language-less users receive Django's default language. """ async_capable = True sync_capable = True def __init__(self, get_response): self.get_response = get_response if iscoroutinefunction(self.get_response): markcoroutinefunction(self) async def __call__(self, request): """ Set current language to language preferred by user. """ await self._patch_request(request) return await self.get_response(request) @staticmethod async def _patch_request(request): user = await request.auser() if user is None: return language = getattr(user, "language", None) if language is not None: translation.activate(language.iso_code) request.LANGUAGE_CODE = translation.get_language()