[python] Django REST framework에서의 멀티언어 처리 방법

Django REST framework은 웹 애플리케이션을 개발하는 데 매우 유용한 Python 프레임워크로, 멀티언어 기능을 지원합니다. 멀티언어 처리는 애플리케이션에서 여러 언어로 텍스트를 제공하고 해당 언어로 동적으로 변경하는 것을 의미합니다. 이를 통해 사용자는 자신의 언어에 맞게 애플리케이션을 사용할 수 있습니다.

언어 모델 설정

Django에서 멀티언어 처리를 위해, LANGUAGE_CODE 설정과 함께 LANGUAGES 설정을 사용합니다. 이를 위해 settings.py 파일을 열고 다음과 같은 설정을 추가합니다:

LANGUAGE_CODE = 'en-us'

LANGUAGES = [
    ('en', 'English'),
    ('ko', 'Korean'),
]

위의 예시에서는 영어와 한국어를 지원하는 애플리케이션을 가정하고 있습니다. LANGUAGE_CODE는 애플리케이션의 기본 언어를 설정하며, LANGUAGES는 사용 가능한 언어의 목록을 정의합니다.

모델 및 시리얼라이저 설정

다국어 지원을 위해 모델과 시리얼라이저에 필드를 추가해야 합니다. 필드 이름에 언어 접두사를 붙일 수도 있고, 각 언어에 대한 별도의 필드를 만들 수도 있습니다.

예를 들어, Blog 모델이 있고 해당 블로그가 여러 언어로 작성된 titlecontent 필드를 가지고 있다고 가정해봅시다.

from django.db import models

class Blog(models.Model):
    en_title = models.CharFielkd(max_length=100)
    en_content = models.TextField()
    ko_title = models.CharField(max_length=100)
    ko_content = models.TextField()

위의 예시에서는 en 접두사가 영어 필드를, ko 접두사가 한국어 필드를 나타냅니다.

시리얼라이저도 마찬가지로 여러 언어를 지원하도록 설정해야 합니다:

from rest_framework import serializers

class BlogSerializer(serializers.ModelSerializer):
    title = serializers.SerializerMethodField()
    content = serializers.SerializerMethodField()

    def get_title(self, obj):
        request = self.context.get('request')
        language = request.LANGUAGE_CODE
        field_name = f'{language}_title'
        return getattr(obj, field_name)

    def get_content(self, obj):
        request = self.context.get('request')
        language = request.LANGUAGE_CODE
        field_name = f'{language}_content'
        return getattr(obj, field_name)

    class Meta:
        model = Blog
        fields = ['title', 'content']

위의 예시에서 SerializerMethodField를 사용하여 titlecontent 필드의 값을 가져옵니다. 현재 요청의 언어를 확인한 후 해당 언어의 필드 값을 반환합니다.

뷰 설정

REST framework의 뷰에서 멀티언어 처리를 위해 요청의 언어를 확인하고 해당 언어의 필드 값을 반환하는 작업을 추가해야 합니다. 예를 들어, 블로그의 리스트를 반환하는 뷰를 작성해봅시다:

from rest_framework.views import APIView
from rest_framework.response import Response

class BlogListView(APIView):
    def get(self, request):
        language = request.LANGUAGE_CODE
        queryset = Blog.objects.all()
        serializer = BlogSerializer(queryset, many=True, context={'request': request})
        return Response(serializer.data)

위의 예시에서 request.LANGUAGE_CODE를 사용하여 요청의 언어를 확인하고, 이를 시리얼라이저의 context에 전달합니다. 이를 통해 시리얼라이저에서 언어에 맞는 필드 값을 가져올 수 있습니다.

결론

Django REST framework은 멀티언어 처리를 위한 강력한 도구를 제공합니다. 언어 모델 설정, 모델 및 시리얼라이저 설정, 그리고 뷰 설정을 통해 멀티언어 애플리케이션을 간편하게 개발할 수 있습니다.