Skip to content

Commit

Permalink
Merge pull request #1844 from airqo-platform/website-backend-translat…
Browse files Browse the repository at this point in the history
…ions

[WEBSITE] Implementing backend dynamic translation for french on the models
  • Loading branch information
Baalmart authored Feb 19, 2024
2 parents ac8d2df + 418d753 commit d429515
Show file tree
Hide file tree
Showing 93 changed files with 2,844 additions and 422 deletions.
4 changes: 3 additions & 1 deletion website/backend/FAQ/admin.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from django.contrib import admin
from .models import FAQ
from modeltranslation.admin import TranslationAdmin
from .translation import *


# Register your models here.
@admin.register(FAQ)
class FAQAdmin(admin.ModelAdmin):
class FAQAdmin(TranslationAdmin):
list_display = ('question', 'answer', 'created_at')
readonly_fields = ('created_at', 'updated_at')
list_per_page = 10
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Generated by Django 4.2.5 on 2024-02-07 17:12

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('FAQ', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='faq',
name='answer_en',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='faq',
name='answer_fr',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='faq',
name='question_en',
field=models.CharField(max_length=150, null=True),
),
migrations.AddField(
model_name='faq',
name='question_fr',
field=models.CharField(max_length=150, null=True),
),
]
7 changes: 7 additions & 0 deletions website/backend/FAQ/translation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from modeltranslation.translator import register, TranslationOptions
from .models import *


@register(FAQ)
class FAQTranslationOptions(TranslationOptions):
fields = ('question', 'answer',)
10 changes: 10 additions & 0 deletions website/backend/FAQ/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from django.utils import translation
from rest_framework import viewsets
from .models import FAQ
from .serializers import FAQSerializer
Expand All @@ -6,3 +7,12 @@
class FAQViewSet(viewsets.ReadOnlyModelViewSet):
queryset = FAQ.objects.all()
serializer_class = FAQSerializer
permission_classes = []

def list(self, request, *args, **kwargs):
language = request.session.get('django_language')
if language is None:
language = request.COOKIES.get('django_language')
if language is not None:
translation.activate(language)
return super().list(request, *args, **kwargs)
25 changes: 16 additions & 9 deletions website/backend/africancities/admin.py
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
from django.contrib import admin
import nested_admin
from .models import AfricanCountry, City, Content, Image, Description
from modeltranslation.admin import TranslationAdmin
from .translation import *

# Register your models here.


class ImageInline(nested_admin.NestedTabularInline):
fields = ('image', 'order')
readonly_fields = ('author', 'updated_by')
model = Image
extra = 0


class DescriptionInline(nested_admin.NestedTabularInline):
fields = ('paragraph','order')
fields = ('paragraph_en', 'paragraph_fr', 'order')
readonly_fields = ('author', 'updated_by')
model = Description
extra = 0


class ContentInline(nested_admin.NestedStackedInline):
fields = ('title','order')
fields = ('title_en', 'title_fr', 'order')
readonly_fields = ('author', 'updated_by')
model = Content
extra = 0
inlines = (DescriptionInline,ImageInline,)
inlines = (DescriptionInline, ImageInline,)


class CityInline(nested_admin.NestedTabularInline):
fields = ('city_name','order')
fields = ('city_name_en', 'city_name_fr', 'order')
readonly_fields = ('author', 'updated_by')
model = City
extra = 0
inlines = (ContentInline,)


@admin.register(AfricanCountry)
class AfricanCitiesAdmin(nested_admin.NestedModelAdmin):
fields = ('country_name', 'country_flag','order','author', 'updated_by')
class AfricanCitiesAdmin(TranslationAdmin, nested_admin.NestedModelAdmin):
fields = ('country_name', 'country_flag', 'order', 'author', 'updated_by')
readonly_fields = ('id', 'author', 'created', 'updated_by', 'modified')
list_display=('country_name','flag_preview','order','author')
search_fields =('country_name','author')
list_display = ('country_name', 'flag_preview', 'order', 'author')
search_fields = ('country_name', 'author')
list_filter = ('created',)
inlines = (CityInline,)
list_per_page = 10
Expand All @@ -46,4 +53,4 @@ def flag_preview(self, obj):

return format_html(f'<img src="{escape(obj.country_flag.url)}" width="{width}" height="{height}" />')

flag_preview.allow_tags = True
flag_preview.allow_tags = True
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Generated by Django 4.2.5 on 2024-02-07 17:32

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('africancities', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='africancountry',
name='country_name_en',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='africancountry',
name='country_name_fr',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='city',
name='city_name_en',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='city',
name='city_name_fr',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='content',
name='title_en',
field=models.CharField(max_length=150, null=True),
),
migrations.AddField(
model_name='content',
name='title_fr',
field=models.CharField(max_length=150, null=True),
),
migrations.AddField(
model_name='description',
name='paragraph_en',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='description',
name='paragraph_fr',
field=models.TextField(null=True),
),
]
22 changes: 22 additions & 0 deletions website/backend/africancities/translation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from modeltranslation.translator import register, TranslationOptions
from .models import *


@register(AfricanCountry)
class AfricanCountryTranslationOptions(TranslationOptions):
fields = ('country_name',)


@register(City)
class CityTranslationOptions(TranslationOptions):
fields = ('city_name',)


@register(Content)
class ContentTranslationOptions(TranslationOptions):
fields = ('title',)


@register(Description)
class DescriptionTranslationOptions(TranslationOptions):
fields = ('paragraph',)
14 changes: 12 additions & 2 deletions website/backend/africancities/views.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
from django.utils import translation
from rest_framework import viewsets
from rest_framework.permissions import AllowAny
from .models import AfricanCountry
from .serializers import AfricanCitySerializer

# Create your views here.


class AfricanCityViewSet(viewsets.ReadOnlyModelViewSet):
permission_classes = (AllowAny,)
queryset = AfricanCountry.objects.all()
serializer_class = AfricanCitySerializer
serializer_class = AfricanCitySerializer
permission_classes = [AllowAny]

def list(self, request, *args, **kwargs):
language = request.session.get('django_language')
if language is None:
language = request.COOKIES.get('django_language')
if language is not None:
translation.activate(language)
return super().list(request, *args, **kwargs)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 7 additions & 2 deletions website/backend/board/admin.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
from django.contrib import admin
from .models import BoardMember, BoardMemberBiography
import nested_admin
from modeltranslation.admin import TranslationAdmin
from .translation import *

# Register your models here.


class BoardMemberBiographyInline(nested_admin.NestedTabularInline):
fields = ('description', 'author', 'order')
fields = ('description_en', 'description_fr', 'author', 'order')
readonly_fields = ('author', )
model = BoardMemberBiography
extra = 0


@admin.register(BoardMember)
class BoardMemberAdmin(nested_admin.NestedModelAdmin):
class BoardMemberAdmin(TranslationAdmin, nested_admin.NestedModelAdmin):
list_display = ("name", "title", "image_tag")
readonly_fields = (
"id",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Generated by Django 4.2.5 on 2024-02-07 14:28

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('board', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='boardmember',
name='name_en',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='boardmember',
name='name_fr',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='boardmember',
name='title_en',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='boardmember',
name='title_fr',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='boardmemberbiography',
name='description_en',
field=models.TextField(blank=True, null=True),
),
migrations.AddField(
model_name='boardmemberbiography',
name='description_fr',
field=models.TextField(blank=True, null=True),
),
]
12 changes: 12 additions & 0 deletions website/backend/board/translation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from modeltranslation.translator import register, TranslationOptions
from .models import *


@register(BoardMember)
class BoardMemberTranslationOptions(TranslationOptions):
fields = ('name', 'title')


@register(BoardMemberBiography)
class BoardMemberBiographyTranslationOptions(TranslationOptions):
fields = ('description',)
12 changes: 10 additions & 2 deletions website/backend/board/views.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
from django.utils import translation
from rest_framework import viewsets
from rest_framework.permissions import AllowAny
from .models import BoardMember
from .serializers import BoardMemberSerializer


class BoardViewSet(viewsets.ReadOnlyModelViewSet):
permission_classes = (AllowAny,)
ordering_fields = ('order', 'name')
queryset = BoardMember.objects.all()
serializer_class = BoardMemberSerializer
permission_classes = [AllowAny]

def list(self, request, *args, **kwargs):
language = request.session.get('django_language')
if language is None:
language = request.COOKIES.get('django_language')
if language is not None:
translation.activate(language)
return super().list(request, *args, **kwargs)
Loading

0 comments on commit d429515

Please sign in to comment.