[Django] 다국어 지원 설정

728x90

gettext 설치


settings.py 수정

  1. 모듈 import
    from django.utils.translation import ugettext_lazy as _​
  2. middleware 추가
    MIDDLEWARE = [
        ...
        'django.contrib.sessions.middleware.SessionMiddleware',    
        'django.middleware.locale.LocaleMiddleware',
        'django.middleware.common.CommonMiddleware',
        ...
    ]​
  3. LANGUAGES 추가 및 LOCALE_PATHS 추가 (원하는 언어 목록 작성)
    LANGUAGES =[
        ('ko', _('Korean')),
        ('en', _('English')),
    ]
    
    LOCALE_PATHS = (
        os.path.join(BASE_DIR, 'locale'),
    )​
    폴더구조  -- project
                        ㄴ locale
                             ㄴ ko  
                             ㄴ en

번역 파일 생성

# 최초 실행 시에는 언어별로 별도 실행
python3 manage.py makemessages -l ko
python3 manage.py makemessages -l en

# 최초 실행이 아닐 경우
python manage.py makemessages -a
  • locale/ko/django.po, locale/en/django.po 파일이 생긴다
  • 무시하고 싶은 파일, 폴더가 있다면
    python3 manage.py makemessages -a -ignore "venv/*” -ignore "static/*”​
     이런식으로 적어주면 된다.
  • *.po 파일을 만들고 나 후 ""와 fuzzy를 검색하여 수정해준다. 

번역 파일 컴파일

python3 manage.py compilemessages
  • django.mo 파일이 생긴다.
  • 컴파일 또한 무시하고 싶으면 같은 방식

사용

  • 브라우저의 언어설정에 따라 바뀌게 된다.
  • html에서 사용법
    {% load i18n %}
    
    {% trans "msgid" %}
  • view.py에서의 사용법
    from django.utils.translation import ugettext_lazy as _
    
    msg = _('msgid')