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