Django/Internationalization

[장고] gettext: 번역기능 모듈

QUERY 2021. 8. 21. 22:31

 


장고-로고
장고 로고


장고에서 언어를 번역할 때 사용하는 gettext 모듈에 대해 알아보겠습니다.

 

>>> settings.py

import os

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware',
    ...
]

LANGUAGE_CODE = 'en-us'       

LANGUAGES = [
        ('ko', 'Korean'),   
        ('en-us', 'English'),    
        ('es', 'Spanish'),
        ('fr', 'French'),
]

LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')

▶ settings.py 파일에 위 내용들을 추가해줍니다.

 

>>> 기본 앱/views.py

from django.shortcuts import render
from django.utils.translation import gettext as _
from django.utils.translation import get_language, activate, gettext


def home(request):
        trans = translate(language='fr')
        return render(request, 'home.html', {'trans': trans})

def translate(language):
        cur_language = get_language()
        try:
                activate(language)
                text = gettext('hello')
        finally:
                activate(cur_language)
        return text

▶ 기본 앱의 views.py에 위 home과 translate 함수를 각각 추가해줍니다.

  • get_language: 현재 사용 중인 언어를 확인해주는 역할을 합니다.
  • activate: 언어를 실행시켜 줍니다.
  • gettext: 번역하고자 하는 문자열을 지정해주는 역할을 합니다.

( * 참고: gettext는 _로 줄여서 사용하기도 합니다. gettext as _ )

 


 


 

>>> home.html

...
<body>
    {{ trans }}
</body>
</html>

▶ 기본 앱의 views.py에서 trans를 넘겨받아 home.html에 뿌려줍니다.

 

명령어 django-admin makemessages --all과 명령어 django-admin compilemessages를 통해 프로젝트명/locale/언어코드/LC_MESSAGES/django.po가 생성됐고, 또 django.po 파일 안에 hello가 번역돼 있다면, home.html의 url에 접속했을 때, hello를 의미하는 해당 언어가 화면에 표시됩니다. 위 예시의 경우, 언어코드가 프랑스어를 뜻하는 fr이므로, bonjour가 화면에 뜨게 됩니다.

 

 

gettext 모듈에 대한 보다 자세한 내용이 궁금하신 분은 아래 링크를 참고하시기 바랍니다.

https://docs.djangoproject.com/en/3.2/topics/i18n/translation/

 

Translation | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com