From b5905542c6d9c0acc0b17556eab071a94af3c955 Mon Sep 17 00:00:00 2001
From: borzechof99 <borzechof99@mi.fu-berlin.de>
Date: Sat, 12 Jun 2021 17:31:49 +0200
Subject: [PATCH] Add Base i18n functionality

---
 requirements.txt                              |  1 +
 .../migrations/0006_auto_20210612_1230.py     | 43 +++++++++++++++++++
 unisportomat/quiz/translation.py              | 33 ++++++++++++++
 unisportomat/unisportomat/settings.py         | 14 ++++++
 4 files changed, 91 insertions(+)
 create mode 100644 unisportomat/quiz/migrations/0006_auto_20210612_1230.py
 create mode 100644 unisportomat/quiz/translation.py

diff --git a/requirements.txt b/requirements.txt
index 4634623..3466d89 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,3 +12,4 @@ urllib3==1.26.4
 Pillow==8.2.0
 django-cors-headers==3.7.0
 djangorestframework==3.12.4
+django-modeltranslation==0.17.2
\ No newline at end of file
diff --git a/unisportomat/quiz/migrations/0006_auto_20210612_1230.py b/unisportomat/quiz/migrations/0006_auto_20210612_1230.py
new file mode 100644
index 0000000..0841c6e
--- /dev/null
+++ b/unisportomat/quiz/migrations/0006_auto_20210612_1230.py
@@ -0,0 +1,43 @@
+# Generated by Django 3.2 on 2021-06-12 12:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0005_merge_20210602_1355'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='calltomove',
+            name='text_de',
+            field=models.TextField(null=True),
+        ),
+        migrations.AddField(
+            model_name='calltomove',
+            name='text_en',
+            field=models.TextField(null=True),
+        ),
+        migrations.AddField(
+            model_name='knowledgesnack',
+            name='text_de',
+            field=models.TextField(null=True),
+        ),
+        migrations.AddField(
+            model_name='knowledgesnack',
+            name='text_en',
+            field=models.TextField(null=True),
+        ),
+        migrations.AddField(
+            model_name='question',
+            name='text_de',
+            field=models.TextField(null=True),
+        ),
+        migrations.AddField(
+            model_name='question',
+            name='text_en',
+            field=models.TextField(null=True),
+        ),
+    ]
diff --git a/unisportomat/quiz/translation.py b/unisportomat/quiz/translation.py
new file mode 100644
index 0000000..16a62a8
--- /dev/null
+++ b/unisportomat/quiz/translation.py
@@ -0,0 +1,33 @@
+"""
+Here, every Model which needs translation fields is registered.
+"""
+
+
+from modeltranslation.translator import register, TranslationOptions
+from .models import Question, CallToMove, KnowledgeSnack
+
+
+@register(Question)
+class QuestionTranslationOptions(TranslationOptions):
+    """
+    Translations for Question-model. Only the text of the question needs to be translated.
+    A German Translation is Required.
+    """
+
+    fields = ("text",)
+    required_languages = ("de",)
+    fallback_values = ("No Translation for this Field",)
+
+
+@register(CallToMove)
+class CallToMoveTranslationOptions(TranslationOptions):
+    fields = ("text",)
+    required_languages = ("de",)
+    fallback_values = ("No Translation for this Field",)
+
+
+@register(KnowledgeSnack)
+class KnowledgeSnackTranslationOptions(TranslationOptions):
+    fields = ("text",)
+    required_languages = ("de",)
+    fallback_values = ("No Translation for this Field",)
diff --git a/unisportomat/unisportomat/settings.py b/unisportomat/unisportomat/settings.py
index 1e46314..f4fdefc 100644
--- a/unisportomat/unisportomat/settings.py
+++ b/unisportomat/unisportomat/settings.py
@@ -33,6 +33,7 @@ ALLOWED_HOSTS = []
 
 INSTALLED_APPS = [
     # "quiz.apps.QuizConfig",
+    "modeltranslation",  # Needs to be before django.contrib.admin because Admin Panel won't work otherwise
     "django.contrib.admin",
     "django.contrib.auth",
     "django.contrib.contenttypes",
@@ -53,6 +54,7 @@ MIDDLEWARE = [
     "django.contrib.messages.middleware.MessageMiddleware",
     "django.middleware.clickjacking.XFrameOptionsMiddleware",
     "corsheaders.middleware.CorsMiddleware",
+    "django.middleware.locale.LocaleMiddleware",
 ]
 
 ROOT_URLCONF = "unisportomat.urls"
@@ -116,6 +118,18 @@ USE_L10N = True
 
 USE_TZ = True
 
+# Internationalization with django-modeltranslation
+# https://django-modeltranslation.readthedocs.io/en/latest/index.html
+
+gettext = lambda s: s
+LANGUAGES = (
+    ("de", gettext("German")),
+    ("en", gettext("English")),
+)
+
+MODELTRANSLATION_DEFAULT_LANGUAGE = "de"
+
+
 # Static files (CSS, JavaScript, Images)
 # https://docs.djangoproject.com/en/3.2/howto/static-files/
 
-- 
GitLab