Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Django 모델 인스턴스에 다국어 번역 추가하는 방법

개요

이 글에서는 Django에서 특정 모델 인스턴스에 대한 번역을 생성하는 방법을 알아봅니다. ID, 이름, 명언, 문장 등의 데이터를 저장하다 보면, 같은 데이터를 여러 언어로 렌더링해야 하는 경우가 자주 발생합니다. 일반적으로 이를 직접 구현하려면 상당히 복잡한 데이터베이스 작업이 필요하지만, 오늘 소개할 방법을 활용하면 몇 줄의 설정만으로 동일한 결과를 얻을 수 있습니다.

Django 프로젝트와 앱을 생성한 뒤, urls를 설정하고 INSTALLED_APPS에 앱을 추가하는 등 기본적인 세팅을 마쳐주세요.

모델을 생성합니다. 이 예제에서는 views.py, urls.py 또는 HTML 파일을 크게 다룰 필요가 없으며, 주로 settings.py, admin.py, models.py와 관리자(admin) URL만 사용합니다.

예제

먼저 django-klingon 패키지를 설치합니다.

pip install django-klingon

settings.py에 다음 내용을 추가합니다.

INSTALLED_APPS += ['klingon']
KLINGON_DEFAULT_LANGUAGE = 'en'

여기서는 프로젝트에 klingon 앱을 등록하고, 기본 언어를 영어('en')로 지정했습니다.

다음과 같이 모델을 생성합니다.

from django.db import models
from klingon.models import Translatable

# Translatable 믹스인 추가
class TeacherData(models.Model, Translatable):
    name = models.CharField(max_length=100)
    # 간단한 필드 3개
    ClassTeacherOF = models.CharField(max_length=100)
    Salary = models.CharField(max_length=100)
    a_simple_word = models.CharField(max_length=100)
    # 번역 대상 필드 정의
    translatable_fields = ('a_simple_word')

여기서는 단순히 모델을 하나 생성했습니다. 핵심 포인트는 translatable_fields 속성을 통해 어떤 필드가 번역 대상인지 지정했다는 점입니다. 해당 필드의 번역 데이터는 별도의 테이블에 저장되며, 원본 객체와 연결되어 참조됩니다.

admin.py에 다음 코드를 추가합니다.

from django.contrib import admin
from .models import TeacherData
from klingon.admin import TranslationInline, create_translations

class TeacherAdmin(admin.ModelAdmin):
    inlines = [TranslationInline]
    actions = [create_translations]

admin.site.register(TeacherData, TeacherAdmin)

여기서는 모델을 Django 관리자 페이지에 등록하고, Klingon의 번역 기능(TranslationInline, create_translations)을 어드민에 연동했습니다.

이제 모든 설정이 완료되었습니다. 실제 결과를 확인해 보겠습니다.

실행 결과

Python 셸을 실행한 후, 새로 생성한 객체에 번역을 추가해 보겠습니다.

In [1]: from formhandlingapp.models import *
In [2]: data = TeacherData.objects.create(name="ama4", ClassTeacherOF="10", Salary="33322", a_simple_word="how are you")
In [3]: data.set_translation('jp', 'a_simple_word', 'お元気ですか')

위 코드를 실행하면 번역 객체가 생성된 것을 확인할 수 있습니다. 물론 이 과정은 views.py를 통해서도 구현할 수 있습니다.

브라우저에서 https://127.0.0.1/admin/ 에 접속하면 관리자 화면에서 번역이 적용된 모습을 확인할 수 있습니다.