Перевод Django (перевод значений базы данных)

Я работаю над проектом, и меня попросили сделать проект многоязычным. но у них нет конкретных языков, и я хочу справиться с этим самым простым и разумным способом, поэтому я подумал, что если я буду использовать пакет django-modeltranslation, это будет мне хорошо.

Что нужно знать: 1. Есть много полей, которые нужно преобразовать во множество моделей и столбцов. 2- Я работаю над drf, интерфейс на другом языке.

что нужно сделать: 1- Я хочу сделать динамические сериализаторы для обработки столбцов, содержащих перевод. ex(name_en, name_fr, name_ar ... и т. д.), поэтому сериализатор всегда должен возвращать ключ "name", а не "name_en" или "name_fr".

Я написал код и отлично работал со мной, но это будет головной болью для меня, и мне будет сложно охватить все случаи и поля, которые мне нужно перевести.

пример кода:

models.py

name = models.CharField(max_length=250, blank=True, null=True)

translation.py

from modeltranslation.translator import translator, TranslationOptions

from .models import Category

class CategoryTranslationOptions(TranslationOptions):
    fields = ('name', 'description')

translator.register(Category, CategoryTranslationOptions)

request_helper.py


def check_language(language):
    if language:
        return language
    else:
        return "en"


def check_accept_language_header(headers):
    is_lang = False
    if "Accept-Language" in headers.keys():
        is_lang = True

    if is_lang:
        return check_language(headers["Accept_Language"])
    else:
        return "en"

views.py

class CategoryCreateListAPIView(ListAPIView):
    permission_classes = [AllowAny]
    queryset = CourseCategory.objects.all()

    def get_serializer_class(self):
        is_lang = check_accept_language_header(self.request.headers)
        if 'ar' == is_lang:
            # serializer_class = CategorySerializer
            return CategoryARSerializer
        else:
            return CategorySerializer

serializers.py


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category

        fields = ['id', 'name', 'slug', 'description', 'image']


class CategoryARSerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['id', 'name', 'slug', 'description_ar', 'image']

    def name(self):
        return 'name_ar'

он работает нормально, но я считаю, что это дурацкий способ справиться с этим случаем, если вы посмотрите на serializers.py, я создаю 2 сериализатора для обработки случая возврата ключа без _ar, и потому что у меня много этого в d b с неограниченным количеством языков, которые мне нужны делать то же самое с умом.

огромное спасибо

0 ответов

Другие вопросы по тегам