37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
|
|
from django import forms
|
||
|
|
from django.utils.translation import gettext_lazy as _
|
||
|
|
|
||
|
|
from wagtail.coreutils import get_content_languages
|
||
|
|
from wagtail.models import Locale
|
||
|
|
|
||
|
|
|
||
|
|
class LocaleForm(forms.ModelForm):
|
||
|
|
required_css_class = "required"
|
||
|
|
language_code = forms.ChoiceField(
|
||
|
|
label=_("Language"), choices=get_content_languages().items()
|
||
|
|
)
|
||
|
|
|
||
|
|
def __init__(self, *args, **kwargs):
|
||
|
|
instance = kwargs.get("instance")
|
||
|
|
super().__init__(*args, **kwargs)
|
||
|
|
|
||
|
|
# Get language codes that are already used
|
||
|
|
used_language_codes = Locale.objects.values_list("language_code", flat=True)
|
||
|
|
|
||
|
|
self.fields["language_code"].choices = [
|
||
|
|
(language_code, display_name)
|
||
|
|
for language_code, display_name in get_content_languages().items()
|
||
|
|
if language_code not in used_language_codes
|
||
|
|
or (instance and instance.language_code == language_code)
|
||
|
|
]
|
||
|
|
|
||
|
|
# If the existing language code is invalid, add an empty value so Django doesn't automatically select a random language
|
||
|
|
if instance and not instance.language_code_is_valid():
|
||
|
|
self.fields["language_code"].choices.insert(
|
||
|
|
0, (None, _("Select a new language"))
|
||
|
|
)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Locale
|
||
|
|
fields = ["language_code"]
|