From 02c7c2e43d78e0d795a370781cc8a048d32fcef6 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Thu, 28 Aug 2025 13:17:19 +0200 Subject: [PATCH] Clean up post-middleware language activation See #161 --- bugsink/middleware.py | 14 +++++++------- users/views.py | 12 ++++++++---- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/bugsink/middleware.py b/bugsink/middleware.py index f19c966..7ebe665 100644 --- a/bugsink/middleware.py +++ b/bugsink/middleware.py @@ -150,17 +150,17 @@ def language_from_accept_language(request): return settings.LANGUAGE_CODE +def get_chosen_language(request_user, request): + if request_user.is_authenticated and request_user.language != "auto": + return get_supported_language_variant(request_user.language, strict=False) + return language_from_accept_language(request) + + class UserLanguageMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): - if request.user.is_authenticated and request.user.language != "auto": - normalized_explicit_lang = get_supported_language_variant(request.user.language, strict=False) - translation.activate(normalized_explicit_lang) - else: - auto_lang = language_from_accept_language(request) - translation.activate(auto_lang) - + translation.activate(get_chosen_language(request.user, request)) response = self.get_response(request) return response diff --git a/users/views.py b/users/views.py index 1eea1ea..ad66680 100644 --- a/users/views.py +++ b/users/views.py @@ -7,10 +7,12 @@ from django.http import Http404 from django.utils import timezone from django.contrib import messages from django.contrib.auth.decorators import login_required, user_passes_test -from django.utils.translation import gettext as _ +from django.utils.translation import gettext as _ +from django.utils import translation from bugsink.app_settings import get_settings, CB_ANYBODY from bugsink.decorators import atomic_for_request_method +from bugsink.middleware import get_chosen_language from .forms import ( UserCreationForm, ResendConfirmationForm, RequestPasswordResetForm, SetPasswordForm, PreferencesForm, UserEditForm) @@ -226,9 +228,11 @@ def preferences(request): form = PreferencesForm(request.POST, instance=user) if form.is_valid(): - form.save() - from django.utils import translation - translation.activate(user.language if user.language != 'auto' else translation.get_language()) + user = form.save() + + # activate the selected language immediately for the Success message; we've already passed the middleware + # stage (which looked at the pre-change language), so we need to do this ourselves with the fresh value. + translation.activate(get_chosen_language(user, request)) messages.success(request, _("Updated preferences")) return redirect('preferences')