mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-03-19 07:54:08 +01:00
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import zoneinfo
|
|
from django.utils import timezone, translation
|
|
from django.utils.cache import patch_vary_headers
|
|
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"
|
|
|
|
# Set timezone
|
|
if tz and user_timezone == "auto":
|
|
timezone_to_activate = zoneinfo.ZoneInfo(tz)
|
|
elif user_timezone != "auto":
|
|
timezone_to_activate = zoneinfo.ZoneInfo(user_timezone)
|
|
else:
|
|
timezone_to_activate = zoneinfo.ZoneInfo("UTC")
|
|
|
|
# Set language
|
|
if user_language and user_language != "auto":
|
|
language_to_activate = user_language
|
|
else:
|
|
language_to_activate = translation.get_language_from_request(request)
|
|
|
|
# Apply timezone and language to the request
|
|
request.timezone = timezone_to_activate
|
|
request.language = language_to_activate
|
|
|
|
# Wrap the response in a custom function to handle activation
|
|
def wrapped_response(request):
|
|
with timezone.override(request.timezone):
|
|
with translation.override(request.language):
|
|
return self.get_response(request)
|
|
|
|
return wrapped_response(request)
|