Respect language headers on error 400/404/500 pages

This commit is contained in:
Raphael Michel
2022-01-25 16:58:52 +01:00
parent 13a86fc6f3
commit 73ab962e16

View File

@@ -30,8 +30,16 @@ from django.utils.translation import gettext as _
from django.views.decorators.csrf import requires_csrf_token from django.views.decorators.csrf import requires_csrf_token
from sentry_sdk import last_event_id from sentry_sdk import last_event_id
from pretix.base.i18n import language
from pretix.base.middleware import get_language_from_request
def csrf_failure(request, reason=""): def csrf_failure(request, reason=""):
try:
locale = get_language_from_request(request)
except:
locale = "en"
with language(locale): # Middleware might not have run, need to do this manually
t = get_template('csrffail.html') t = get_template('csrffail.html')
c = { c = {
'reason': reason, 'reason': reason,
@@ -61,6 +69,11 @@ def csrf_failure(request, reason=""):
@requires_csrf_token @requires_csrf_token
def page_not_found(request, exception): def page_not_found(request, exception):
try:
locale = get_language_from_request(request)
except:
locale = "en"
with language(locale): # Middleware might not have run, need to do this manually
exception_repr = exception.__class__.__name__ exception_repr = exception.__class__.__name__
# Try to get an "interesting" exception message, if any (and not the ugly # Try to get an "interesting" exception message, if any (and not the ugly
# Resolver404 dictionary) # Resolver404 dictionary)
@@ -84,6 +97,11 @@ def page_not_found(request, exception):
@requires_csrf_token @requires_csrf_token
def server_error(request): def server_error(request):
try:
locale = get_language_from_request(request)
except:
locale = "en"
with language(locale): # Middleware might not have run, need to do this manually
try: try:
template = loader.get_template('500.html') template = loader.get_template('500.html')
except TemplateDoesNotExist: except TemplateDoesNotExist: