feat: add middleware for setting user language and timezone when set as setting

This commit is contained in:
Herculino Trotta
2024-10-11 01:56:36 -03:00
parent 6b22d2d837
commit b6f8c224f0
3 changed files with 31 additions and 17 deletions

View File

@@ -73,7 +73,6 @@ MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"apps.common.middleware.timezone.TimezoneMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
@@ -82,6 +81,7 @@ MIDDLEWARE = [
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"django_browser_reload.middleware.BrowserReloadMiddleware",
"hijack.middleware.HijackUserMiddleware",
"apps.common.middleware.localization.LocalizationMiddleware",
]
ROOT_URLCONF = "WYGIWYH.urls"

View File

@@ -0,0 +1,30 @@
import zoneinfo
from django.utils import timezone
from django.utils.translation import activate
class LocalizationMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tz = request.COOKIES.get("mytz")
if request.user.is_authenticated:
user_settings = request.user.settings
user_language = user_settings.language
user_timezone = user_settings.timezone
else:
user_language = "auto"
user_timezone = "auto"
if tz and user_timezone == "auto":
timezone.activate(zoneinfo.ZoneInfo(tz))
elif user_timezone != "auto":
timezone.activate(zoneinfo.ZoneInfo(user_timezone))
else:
timezone.activate(zoneinfo.ZoneInfo("UTC"))
if user_language and user_language != "auto":
activate(user_language)
return self.get_response(request)

View File

@@ -1,16 +0,0 @@
import zoneinfo
from django.utils import timezone
from django.shortcuts import render
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tz = request.COOKIES.get("mytz")
if tz:
timezone.activate(zoneinfo.ZoneInfo(tz))
else:
timezone.activate(zoneinfo.ZoneInfo("UTC"))
return self.get_response(request)