Presale: Add a language switch to the UI

This commit is contained in:
Raphael Michel
2015-05-08 21:59:08 +02:00
parent c5a7594943
commit 7a3051c22d
249 changed files with 296 additions and 244 deletions

View File

@@ -20,4 +20,13 @@ footer {
}
.js-only {
display: none;
}
.locales {
display: inline;
a {
text-decoration: none;
}
img {
vertical-align: baseline;
}
}

View File

@@ -20,6 +20,17 @@
<div class="container event">
<div class="page-header">
<div class="pull-right loginbox">
{% if request.event.settings.locales|length > 1 %}
<div class="locales">
{% for l in request.event.settings.locales %}
{% if l != request.LANGUAGE_CODE %}
<a href="{% url "presale:locale.set" %}?locale={{ l }}&next={{ request.path }}%3F{{ request.META.QUERY_STRING|urlencode }}">
<img src="{% static "pretixbase/img/flags" %}/{{ l }}.png" />
</a>
{% endif %}
{% endfor %}
</div> &middot;
{% endif %}
{% if request.user.is_authenticated %}
{% blocktrans trimmed with name=request.user.identifier %}
Hello, {{ name }}!

View File

@@ -4,6 +4,7 @@ import pretix.presale.views.event
import pretix.presale.views.cart
import pretix.presale.views.checkout
import pretix.presale.views.order
import pretix.presale.views.locale
urlpatterns = [
@@ -30,4 +31,5 @@ urlpatterns = [
url(r'^logout$', pretix.presale.views.event.EventLogout.as_view(), name='event.logout'),
url(r'^orders$', pretix.presale.views.event.EventOrders.as_view(), name='event.orders'),
])),
url(r'^locale/set$', pretix.presale.views.locale.LocaleSet.as_view(), name='locale.set'),
]

View File

@@ -253,7 +253,9 @@ class EventLogin(EventViewMixin, TemplateView):
if form.is_valid():
user = User.objects.create_local_user(
request.event, form.cleaned_data['username'], form.cleaned_data['password'],
email=form.cleaned_data['email'] if form.cleaned_data['email'] != '' else None
email=form.cleaned_data['email'] if form.cleaned_data['email'] != '' else None,
locale=request.LANGUAGE_CODE,
timezone=request.timezone if hasattr(request, 'timezone') else None
)
user = authenticate(identifier=user.identifier, password=form.cleaned_data['password'])
login(request, user)
@@ -263,7 +265,9 @@ class EventLogin(EventViewMixin, TemplateView):
if form.is_valid():
user = User.objects.create_global_user(
form.cleaned_data['email'], form.cleaned_data['password'],
)
locale=request.LANGUAGE_CODE,
timezone=request.timezone if hasattr(request, 'timezone') else None
)
user = authenticate(identifier=user.identifier, password=form.cleaned_data['password'])
login(request, user)
return self.redirect_to_next()

View File

@@ -0,0 +1,22 @@
from datetime import datetime, timedelta
from django.conf import settings
from django.shortcuts import redirect
from django.views.generic import View
class LocaleSet(View):
def get(self, request, *args, **kwargs):
locale = request.GET.get('locale')
resp = redirect(request.GET.get('next', request.META.get('HTTP_REFERER', '/')))
if locale in [lc for lc, ll in settings.LANGUAGES]:
if request.user.is_authenticated():
request.user.locale = locale
request.user.save()
max_age = 10 * 365 * 24 * 60 * 60
resp.set_cookie(settings.LANGUAGE_COOKIE_NAME, locale, max_age=max_age,
expires=(datetime.utcnow() + timedelta(seconds=max_age)).strftime(
'%a, %d-%b-%Y %H:%M:%S GMT'),
domain=settings.SESSION_COOKIE_DOMAIN)
return resp