diff --git a/requirements.txt b/requirements.txt index 4634623558f4ef01fca555f1ff5ccf511518cd5b..3466d8979683b95afee3c6a87a1d68d67f61f981 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 0000000000000000000000000000000000000000..0841c6e4eeb8b109ac3f719cad169cb658a10612 --- /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 0000000000000000000000000000000000000000..16a62a8ec63625382ec0d1676cbfa2cdb333584e --- /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 1e46314375fb8545697ddb902f87bc66606ff270..f4fdefc869a206c673cc06dc07158fccac340523 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/