Files
WYGIWYH/app/apps/common/middleware/localization.py
2025-01-27 13:22:21 -03:00

50 lines
1.7 KiB
Python

import zoneinfo
from django.utils import formats
from django.utils import timezone, translation
from django.utils.functional import lazy
from apps.common.functions.format import get_format as custom_get_format
from apps.users.models import UserSettings
class LocalizationMiddleware:
def __init__(self, get_response):
self.get_response = get_response
self.patch_get_format()
def __call__(self, request):
tz = request.COOKIES.get("mytz")
if request.user.is_authenticated and hasattr(request.user, "settings"):
user_settings = request.user.settings
user_language = user_settings.language
user_timezone = user_settings.timezone
elif request.user.is_authenticated and not hasattr(request.user, "settings"):
# Create UserSettings if it doesn't exist
UserSettings.objects.create(user=request.user)
user_language = "auto"
user_timezone = "auto"
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":
translation.activate(user_language)
else:
detected_language = translation.get_language_from_request(request)
translation.activate(detected_language)
return self.get_response(request)
@staticmethod
def patch_get_format():
formats.get_format = custom_get_format
formats.get_format_lazy = lazy(custom_get_format, str, list, tuple)