Support for inofficial languages

This commit is contained in:
Raphael Michel
2018-03-08 13:19:57 +01:00
parent d879634810
commit 162f37e00f
8 changed files with 127 additions and 7 deletions

View File

@@ -1,6 +1,7 @@
import os
from django import forms
from django.conf import settings
from django.utils.html import conditional_escape
from django.utils.translation import ugettext_lazy as _
@@ -102,3 +103,68 @@ class SlugWidget(forms.TextInput):
ctx = super().get_context(name, value, attrs)
ctx['pre'] = self.prefix
return ctx
class MultipleLanguagesWidget(forms.CheckboxSelectMultiple):
option_template_name = 'pretixcontrol/multi_languages_widget.html'
def sort(self):
self.choices = sorted(self.choices, key=lambda l: (
(
0 if l[0] in settings.LANGUAGES_OFFICIAL
else (
1 if l[0] not in settings.LANGUAGES_INCUBATING
else 2
)
), str(l[1])
))
def options(self, name, value, attrs=None):
self.sort()
return super().options(name, value, attrs)
def optgroups(self, name, value, attrs=None):
self.sort()
return super().optgroups(name, value, attrs)
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
opt = super().create_option(name, value, label, selected, index, subindex, attrs)
opt['official'] = value in settings.LANGUAGES_OFFICIAL
opt['incubating'] = value in settings.LANGUAGES_INCUBATING
return opt
class SingleLanguageWidget(forms.Select):
def modify(self):
if hasattr(self, '_modified'):
return self.choices
self.choices = sorted(self.choices, key=lambda l: (
(
0 if l[0] in settings.LANGUAGES_OFFICIAL
else (
1 if l[0] not in settings.LANGUAGES_INCUBATING
else 2
)
), str(l[1])
))
new_choices = []
for k, v in self.choices:
new_choices.append((
k,
v if k in settings.LANGUAGES_OFFICIAL
else (
'{} (inofficial translation)'.format(v) if k not in settings.LANGUAGES_INCUBATING
else '{} (translation in progress)'.format(v)
)
))
self._modified = True
self.choices = new_choices
def options(self, name, value, attrs=None):
self.modify()
return super().options(name, value, attrs)
def optgroups(self, name, value, attrs=None):
self.modify()
return super().optgroups(name, value, attrs)

View File

@@ -17,7 +17,8 @@ from pretix.base.models import Event, Organizer, TaxRule
from pretix.base.models.event import EventMetaValue, SubEvent
from pretix.base.reldate import RelativeDateField, RelativeDateTimeField
from pretix.control.forms import (
ExtFileField, SlugWidget, SplitDateTimePickerWidget,
ExtFileField, MultipleLanguagesWidget, SingleLanguageWidget, SlugWidget,
SplitDateTimePickerWidget,
)
from pretix.multidomain.urlreverse import build_absolute_uri
from pretix.presale.style import get_fonts
@@ -27,7 +28,7 @@ class EventWizardFoundationForm(forms.Form):
locales = forms.MultipleChoiceField(
choices=settings.LANGUAGES,
label=_("Use languages"),
widget=forms.CheckboxSelectMultiple,
widget=MultipleLanguagesWidget,
help_text=_('Choose all languages that your event should be available in.')
)
has_subevents = forms.BooleanField(
@@ -279,11 +280,12 @@ class EventSettingsForm(SettingsForm):
)
locales = forms.MultipleChoiceField(
choices=settings.LANGUAGES,
widget=forms.CheckboxSelectMultiple,
widget=MultipleLanguagesWidget,
label=_("Available languages"),
)
locale = forms.ChoiceField(
choices=settings.LANGUAGES,
widget=SingleLanguageWidget,
label=_("Default language"),
)
show_quota_left = forms.BooleanField(
@@ -637,6 +639,8 @@ class InvoiceSettingsForm(SettingsForm):
(r.identifier, r.verbose_name) for r in event.get_invoice_renderers().values()
]
self.fields['invoice_numbers_prefix'].widget.attrs['placeholder'] = event.slug.upper() + '-'
locale_names = dict(settings.LANGUAGES)
self.fields['invoice_language'].choices = [('__user__', _('The user\'s language'))] + [(a, locale_names[a]) for a in event.settings.locales]
class MailSettingsForm(SettingsForm):

View File

@@ -7,7 +7,7 @@ from i18nfield.forms import I18nFormField, I18nTextarea
from pretix.base.forms import I18nModelForm, SettingsForm
from pretix.base.models import Organizer, Team
from pretix.control.forms import ExtFileField
from pretix.control.forms import ExtFileField, MultipleLanguagesWidget
from pretix.multidomain.models import KnownDomain
from pretix.presale.style import get_fonts
@@ -158,7 +158,7 @@ class OrganizerDisplaySettingsForm(SettingsForm):
locales = forms.MultipleChoiceField(
choices=settings.LANGUAGES,
label=_("Use languages"),
widget=forms.CheckboxSelectMultiple,
widget=MultipleLanguagesWidget,
help_text=_('Choose all languages that your organizer homepage should be available in.')
)
primary_font = forms.ChoiceField(