From b6f8c224f055fea02c0aaf0799ab934a06bb7b43 Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Fri, 11 Oct 2024 01:56:36 -0300 Subject: [PATCH] feat: add middleware for setting user language and timezone when set as setting --- app/WYGIWYH/settings.py | 2 +- app/apps/common/middleware/localization.py | 30 ++++++++++++++++++++++ app/apps/common/middleware/timezone.py | 16 ------------ 3 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 app/apps/common/middleware/localization.py delete mode 100644 app/apps/common/middleware/timezone.py diff --git a/app/WYGIWYH/settings.py b/app/WYGIWYH/settings.py index c76f84f..2b23740 100644 --- a/app/WYGIWYH/settings.py +++ b/app/WYGIWYH/settings.py @@ -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" diff --git a/app/apps/common/middleware/localization.py b/app/apps/common/middleware/localization.py new file mode 100644 index 0000000..8ab99f5 --- /dev/null +++ b/app/apps/common/middleware/localization.py @@ -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) diff --git a/app/apps/common/middleware/timezone.py b/app/apps/common/middleware/timezone.py deleted file mode 100644 index 3278bcf..0000000 --- a/app/apps/common/middleware/timezone.py +++ /dev/null @@ -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)