Перевод 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 с неограниченным количеством языков, которые мне нужны делать то же самое с умом.
огромное спасибо