카테고리 없음
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 %}
참고
반응형