카테고리 없음

django 다국어 번역 사용법

SciomageLAB 2024. 10. 20. 16:41
반응형

개요

  • django로 웹페이지를 만들 때 다국어 서비스를 지원 할 일이 있습니다.
  • 영어나 중국어를 지원하면 해외까지 서비스를 확대 할 수 있고, 그만큼 페이지 뷰도 늘겁니다.
  • 다행히 django에서 이런 다국어 기능을 제공합니다. 이 기능에 대해서 알아보겠습니다.
  • django는 잘 만들어진 프레임워크 입니다. 정해진 파일에 정해진 대로 입력만 하면 됩니다.
  • 간단한 튜토리얼 같이 정리 해봤습니다.

settings.py

from django.utils.translation import ugettext_lazy as _

MIDDLEWARE = [

    # ...
    'django.contrib.sessions.middleware.SessionMiddleware',

    # ...
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ...
]

LANGUAGE_CODE = 'ko-kr'
USE_I18N = True

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

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale')
]
  • settings.py에 설정을 정의해야 합니다. django.utils.translation.ugettext_lazy_으로 import 합니다.
  • 나머지는 이를 위한 설정이니까 복붙하면 됩니다.
  • 없던 LOCALE_PATHS를 설정 했으니 디렉토리를 아래와 같이 생성 합니다.
$ mkdir locale

views.py

from django.utils.translation import ugettext_lazy as _

def test(request):
    msg = _(안녕하세요)
    return HttpResponse(msg)
  • 테스트를 위해서 views에 함수를 하나 만들었습니다.
  • 간단히 안녕하세요를 리턴하는 함수입니다.
  • 그런데 _함수(ugettext_lazy)를 호출합니다. 일단 이렇게 해 놓고 다음으로 넘어갑니다.

makemessages

# 최초 실행 시에는 언어별로 별도 실행해야 한다.
$ python manage.py makemessages -l ko
$ python manage.py makemessages -l en

# 최초 실행이 아닐 경우
$ python manage.py makemessages -a

# gettext가 없다는 오류 메세지가 나타난다면
$ sudo apt-get install gettext
  • 위 명령을 실행하면 아래 두 파일이 생성 됩니다.
    • locale/en/LC_MESSAGES/django.po
    • locale/en/LC_MESSAGES/django.mo
    • locale/ko/LC_MESSAGES/django.po
    • locale/ko/LC_MESSAGES/django.mo

번역

  • 위에서 생성된 파일 중 po 파일을 열어 보면 다음과 같습니다.
  • 어디서 어떤 이름으로 썼는지 나오고, msgstr에 번역된 언어를 써주면 됩니다.
# locale/en/LC_MESSAGES/django.po 파일
#: mysite/core/views.py:211
msgid 안녕하세요
msgstr Hello
  • ↑ en이니까 영어로 번역
# locale/ko/LC_MESSAGES/django.po 파일
#: mysite/core/views.py:211
msgid 안녕하세요
msgstr 안녕하세요
  • ↑ ko니까 한글로 그냥 입력

compilemessages

  • 이렇게 번역(?)을 끝내고 아래 명령으로 mo 파일에 적용한다.
$ python manage.py compilemessages

# 언어별로 실행
$ python manage.py compilemessages -l ko
$ python manage.py compilemessages -l en

template 적용

template에서 번역을 할 때는 아래와 같이 적용 후 makemessages부터 다시 사작하면 된다.

<!-- trans 태그 사용-->
{% load i18n %}
{% trans '안녕하세요' %}

<!-- 여러 줄을 번역할 경우 -->
{% blocktrans %}
번역 테스트
번역 테스트
{% endblocktrans %}

참고

반응형