다국어 설정하기 - Tirrilee/TechTalk GitHub Wiki

settings.py

MIDDLEWARE = [
    ...
    'django.middleware.locale.LocaleMiddleware', # 이 부분 추가
    'django.middleware.common.CommonMiddleware',
    ...
]

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

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

gettext 설치

위 파일을 설치 후 환경변수 설정을 해주자

$ xgettext --version
  • 위 명령어가 정상 동작하면 성공

번역 파일 생성

  • cmd창을 열고 Python 가상환경에 들어가서 명령어를 쳐줘야한다.
$ python manage.py makemessages -l ko
$ python manage.py makemessages -l en

파일이 생성된 후 $ python manage.py makemessages -a 다음 명령어로 한번에 업데이트 가능하다.

templates

{% load i18n %}
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>:: {% trans "html_title" %} ::</title>
...
  • {% load i18n %} 를 추가하고
  • 다국어를 적용시킬 부분에 {% trans "html_title" %} 이렇게 적어준 다음
  • $ python manage.py makemessages -a 다음 명령어를 실행시킨다.

locale/../django.po

#: .\templates\Base\Base.html:7
msgid "html_title"
msgstr ""
  • 생성된 파일을 보면 이런식으로 msgid가 설정된걸 볼 수 있다.
  • msgstr에 언어별로 번역된 글을 적어주면 된다.

view에서 언어 세팅

Project/urls.py

urlpatterns = [
    path('', HomePage, name='home'),
    path('/projects', ProjectListPage, name='projects'),
]

App/urls.py

urlpatterns += [
    ...
    path('<str:lang>', include('App.urls')),
]

App/views.py

def HomePage(request, lang):
    translation.activate(lang)
    return render(request, 'Home/HomePage.html', {
        'lang':lang
    })

Home/HomePage.html

<a href="{% url 'App:projects'  lang=lang %}">리스트 페이지</a>
⚠️ **GitHub.com Fallback** ⚠️