장고에서 언어를 번역할 때 사용하는 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/
'Django > Internationalization' 카테고리의 다른 글
[장고] i18n: LOGIN_REDIRECT_URL 설정방법 (0) | 2021.08.22 |
---|---|
[장고] i18n: 다국어 기능 Snippet (0) | 2021.08.21 |
[장고] i18n: 다국어 기능 사용법 (0) | 2021.08.21 |