from django.db import models
from wagtail.contrib.settings.models import BaseSetting, register_setting

from django.utils.translation import gettext_lazy as _
from wagtail.admin.edit_handlers import FieldPanel, FieldRowPanel, \
    MultiFieldPanel, StreamFieldPanel, TabbedInterface, ObjectList
from wagtail.core import blocks
from wagtail.core.fields import StreamField
from wagtail.images.edit_handlers import ImageChooserPanel
from utils.translation import TranslatedField


@register_setting(icon='fa-window-minimize')
class FooterSettings(BaseSetting):
    class Meta:
        verbose_name = _('footer_en')   # quickfix

    footer_en = StreamField(
        [('column', blocks.StructBlock([
            ('size', blocks.IntegerBlock(min_value=1, max_value=12)),
            ('content', blocks.RichTextBlock()),
        ]))],
        blank=True,
    )

    footer_sv = StreamField(
        [('column', blocks.StructBlock([
            ('size', blocks.IntegerBlock(min_value=1, max_value=12)),
            ('content', blocks.RichTextBlock()),
        ]))],
        blank=True,
    )

    footer = TranslatedField('footer_en', 'footer_sv')

    panels_sv = [
        StreamFieldPanel('footer_sv')
    ]

    panels_en = [
        StreamFieldPanel('footer_en')
    ]

    edit_handler = TabbedInterface([
        ObjectList(panels_en, heading=_("English")),
        ObjectList(panels_sv, heading=_("Swedish"))
    ])


@register_setting(icon='openquote')
class SocialMediaSettings(BaseSetting):
    class Meta:
        verbose_name = _('social media accounts')

    facebook = models.URLField(
        help_text=_('Your Facebook page URL'),
        blank=True,
    )
    instagram = models.CharField(
        max_length=255,
        help_text=_('Your Instagram username, without the @'),
        blank=True,
    )
    twitter = models.CharField(
        max_length=255,
        help_text=_('Your Twitter username, without the @'),
        blank=True,
    )


class Logo(models.Model):
    class Meta:
        verbose_name = _('logo')
        verbose_name_plural = _('logos')

    def __str__(self):
        logotext = str(_('logo'))
        return logotext.capitalize()

    CATEGORY_CHOICES = (
        ('committee', _('Committee')),
        ('section', _('Section')),
    )

    category = models.CharField(
        max_length=20,
        choices=CATEGORY_CHOICES,
        verbose_name=_('category'),
        blank=False,
        null=False,
    )

    link = models.URLField(
        verbose_name=_('links to'),
        null=False,
        blank=False,
    )

    logo = models.ForeignKey(
        'wagtailimages.Image',
        verbose_name=_('logo'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    logo_white = models.ForeignKey(
        'wagtailimages.Image',
        verbose_name=_('white logo'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    logo_black = models.ForeignKey(
        'wagtailimages.Image',
        verbose_name=_('black logo'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    belongs_to = models.ForeignKey(
        'wagtailcore.Site',
        verbose_name=_('belongs to'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
    )

    # ------ Administrator settings ------
    panels = [MultiFieldPanel([
        FieldRowPanel([
            FieldPanel('category'),
            FieldPanel('link'),
        ]),
        ImageChooserPanel('logo'),
        ImageChooserPanel('logo_white'),
        ImageChooserPanel('logo_black'),
        FieldPanel('belongs_to'),
    ])]

src/branding/models.py
from django.db import models
from wagtail.contrib.settings.models import BaseSetting, register_setting

from django.utils.translation import gettext_lazy as _
from wagtail.admin.edit_handlers import FieldPanel, FieldRowPanel, \
    MultiFieldPanel, StreamFieldPanel, TabbedInterface, ObjectList
from wagtail.core import blocks
from wagtail.core.fields import StreamField
from wagtail.images.edit_handlers import ImageChooserPanel
from utils.translation import TranslatedField


@register_setting(icon='fa-window-minimize')
class FooterSettings(BaseSetting):
    class Meta:
        verbose_name = _('footer')   # quickfix

    footer_en = StreamField(
        [('column', blocks.StructBlock([
            ('size', blocks.IntegerBlock(min_value=1, max_value=12)),
            ('content', blocks.RichTextBlock()),
        ]))],
        blank=True,
    )

    footer_sv = StreamField(
        [('column', blocks.StructBlock([
            ('size', blocks.IntegerBlock(min_value=1, max_value=12)),
            ('content', blocks.RichTextBlock()),
        ]))],
        blank=True,
    )

    footer = TranslatedField('footer_en', 'footer_sv')

    panels_sv = [
        StreamFieldPanel('footer_sv')
    ]

    panels_en = [
        StreamFieldPanel('footer_en')
    ]

    edit_handler = TabbedInterface([
        ObjectList(panels_en, heading=_("English")),
        ObjectList(panels_sv, heading=_("Swedish"))
    ])


@register_setting(icon='openquote')
class SocialMediaSettings(BaseSetting):
    class Meta:
        verbose_name = _('social media accounts')

    facebook = models.URLField(
        help_text=_('Your Facebook page URL'),
        blank=True,
    )
    instagram = models.CharField(
        max_length=255,
        help_text=_('Your Instagram username, without the @'),
        blank=True,
    )
    twitter = models.CharField(
        max_length=255,
        help_text=_('Your Twitter username, without the @'),
        blank=True,
    )


class Logo(models.Model):
    class Meta:
        verbose_name = _('logo')
        verbose_name_plural = _('logos')

    def __str__(self):
        logotext = str(_('logo'))
        return logotext.capitalize()

    CATEGORY_CHOICES = (
        ('committee', _('Committee')),
        ('section', _('Section')),
    )

    category = models.CharField(
        max_length=20,
        choices=CATEGORY_CHOICES,
        verbose_name=_('category'),
        blank=False,
        null=False,
    )

    link = models.URLField(
        verbose_name=_('links to'),
        null=False,
        blank=False,
    )

    logo = models.ForeignKey(
        'wagtailimages.Image',
        verbose_name=_('logo'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    logo_white = models.ForeignKey(
        'wagtailimages.Image',
        verbose_name=_('white logo'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    logo_black = models.ForeignKey(
        'wagtailimages.Image',
        verbose_name=_('black logo'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    belongs_to = models.ForeignKey(
        'wagtailcore.Site',
        verbose_name=_('belongs to'),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
    )

    # ------ Administrator settings ------
    panels = [MultiFieldPanel([
        FieldRowPanel([
            FieldPanel('category'),
            FieldPanel('link'),
        ]),
        ImageChooserPanel('logo'),
        ImageChooserPanel('logo_white'),
        ImageChooserPanel('logo_black'),
        FieldPanel('belongs_to'),
    ])]

src/branding/models.py
diff --git a/requirements.txt b/requirements.txt
index 26c27b5a..4312be0d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,5 @@
 
+django_recaptcha==3.0.0
 Django[argon2]==3.2.17
 wagtail==2.16.2
 
@@ -40,4 +41,4 @@ django-jsonschema-form==1.0.3
 python-decouple==3.7
 
 # Search and select widget
-django-select2==8.1.1
+django-select2==8.1.1
\ No newline at end of file
diff --git a/src/branding/locale/sv/LC_MESSAGES/django.po b/src/branding/locale/sv/LC_MESSAGES/django.po
index fe9f3619..801969f3 100644
--- a/src/branding/locale/sv/LC_MESSAGES/django.po
+++ b/src/branding/locale/sv/LC_MESSAGES/django.po
@@ -19,7 +19,7 @@ msgstr "Branding"
 
 #: branding/models.py:15
 msgid "footer"
-msgstr ""
+msgstr "sidfot"
 
 #: branding/models.py:33
 msgid "social media accounts"
diff --git a/src/branding/models.py b/src/branding/models.py
index 33820fe0..1d3a9a13 100644
--- a/src/branding/models.py
+++ b/src/branding/models.py
@@ -13,7 +13,7 @@
 @register_setting(icon='fa-window-minimize')
 class FooterSettings(BaseSetting):
     class Meta:
-        verbose_name = _('footer_en')   # quickfix
+        verbose_name = _('footer')   # quickfix
 
     footer_en = StreamField(
         [('column', blocks.StructBlock([

Translations for footer_en missing in production
I noticed that in the settings the footer option is called footer_en. Seems like a translation has gone missing
![image](https://user-images.githubusercontent.com/19433606/228253442-09290b66-c344-417f-856a-19e97083a23a.png)

