다양한 언어에 대응이 되는 웹사이트를 장고에서는 손쉽게 만들 수 있다. 물론, 사용자가 쓴 내용을 번역하려면 DB에 각각 내용마다 번역을 할 수 있게끔 설계해야 하겠지만, DB이외의 메뉴라든가 Form이라든가 공통적으로 보여지게 되는 페이지의 텍스트 들을 각각 번역하여 Django에서 관리할 수 있게 되어있다.
공식 문서는 https://docs.djangoproject.com/en/1.10/topics/i18n/translation/ 를 참조하면 된다.
1) 우선 po file을 만들자.
project folder에서 다음과 같이 입력한다.
mkdir locale
(혹시 GNU gettext가 없다고 나올 경우에는 이렇게 한다.)
sudo apt-get install gettext
locale폴더가 만들어졌으면, 같은 project folder에서 이렇게 입력한다.
django-admin makemessages -l ja
ja는 일본어에 해당하는 언어코드이며, 다른 언어를 하고 싶으면 해당 언어 코드로 하면 된다.
2) 내가 바꾸고 싶은 코드를 ugettext로 감싼다.
from django.utils.translation import ugettext as _ GENDER_CHOICES = [ ('M', _('male')), ('F', _('female')), ('U', _('do not specify')), ]
만약 위와 같이 select widget에 들어갈 내용을 여러가지 언어로 바꾸고 싶다면, _('something')의 형태로 바꾼다. ugettext나 ugettext_lazy가 설정되어 있는 텍스트는 장고가 locale에서 설정한 언어로 바꾸게 된다.
** 번역해야 할 대상이 view.py, models.py, forms.py등에 있다면, ugettext_lazy로 하는 것이 좋다.
3) project/settings.py
import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) ... MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', # translation 'django.middleware.common.CommonMiddleware', ] ... USE_I18N = True LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'),
) LANGUAGES = ( ('ko_kr', '한국어'), ('ja', 'Japanese'), )
Middleware에 django.middleware.locale.LocaleMiddleware를 추가한다. 이때, 중요한건 SessionMiddleware 다음에, CommonMiddleware 앞에 있어야 한다는 점이다. LOCALE_PATHS가 정확하게 되어있어야 감지를 할 수 있으며, 가능한 언어를 정확하게 나열한다.
4) mo파일로 컴파일하기
python manage.py compilemessages
실행하면 po파일을 기준으로 mo파일이 만들어질 것이고, 서버를 다시 실행시키면 정상적으로 작동할 것이다.
'Programming > Django' 카테고리의 다른 글
[Django] Gmail SMTP 보내기 (3) | 2017.04.19 |
---|---|
[Django] Django+uWSGI에서 os.environ variable 설정하기 (0) | 2017.04.18 |
[Django] Form에서 비밀번호 확인하기 (0) | 2017.03.10 |
[Django] 오픈 소스 기반 웹 소스 코드 'Django Girls Website' 분석기 - 1 (0) | 2017.02.18 |