Django/Internationalization

[장고] i18n: 다국어 기능 Snippet

QUERY 2021. 8. 21. 21:56

 


장고-로고
장고 로고


웹사이트를 제작할 때, 오로지 한국인만을 위해 만들어진 웹사이트가 아니라면, 한국어 이외에 영어, 스페인어, 프랑스어, 중국어, 일본어 등 다양한 언어를 지원해야 하는 경우가 있습니다. 언어가 추가될 때마다 영문 버전의 base.html, home.html, navbar.html, footer.html을 만들고, 스페인어 버전의 템플릿들, 프랑스어, 중국어, 일본어 등의 템플릿을 일일이 만들어서 url을 지정해줄 수도 있습니다. 하지만 그럴 경우, 언어만 다를 뿐 결국 동일한 형태의 템플릿들을 여러 개로 관리해야 하기 때문에 번거롭고 비효율적입니다. 그럴 때 사용할 수 있는 기능이 바로, 장고에서 기본적으로 제공하는 i18n입니다. 이번 포스트는 언제든지 복사 붙여 넣기 해서 쓸 수 있도록, 제가 주로 사용하는 기본 포맷을 적어보겠습니다. 만약 i18n이 뭔지 잘 모르신다면, 기본적인 사용 방법부터 설명해 놓은 아래 포스팅을 참고하시기 바랍니다. 

https://query.tistory.com/41

 

[Dj] 장고 다국어 지원 사용법: i18n

장고에서 기본적으로 제공하는 다국어 지원 기능인 i18n의 사용법에 대해 알아보겠습니다. 1. 장고 프로젝트 생성 먼저, 장고 프로젝트를 생성합니다. cmd: django-admin startproject 프로젝트명 이해의

query.tistory.com


 

1. settings.py에 설정 추가

>>> 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', 'English'),    
        ('es', 'Spanish'),
        ('fr', 'French'),
        ('ja', 'Japanese'),
]

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

 


2. locale 폴더 생성

 프로젝트 디렉터리에 locale 폴더를 만들어줍니다. 그리고 그 안에 ko, en, es, fr, ja 폴더를 만들어줍니다.

 

 


3. url 설정

>>> config/urls.py        # 반드시 settings.py와 동일한 폴더에 있는 urls.py

from django.urls import include
from django.conf.urls.i18n import i18n_patterns


urlpatterns += i18n_patterns(
        path('', include('기본 앱. urls', namespace='기본 앱'))
)

( * 참고: 이때, prefix로 언어코드가 적용되길 원하는 모든 url은 urlpatterns += i18n_patterns(모두 여기에 담겨있어야만 합니다.)

>>> 기본 앱/urls.py        # 기본 앱 안에 urls.py를 생성

from django.urls import path


app_name = '기본 앱'

urlpatterns = [
        path('', views, name='뷰 명'),
]

 


4. Language Dropdown 메뉴 생성

navbar.html에 언어를 선택할 수 있는 드롭다운 메뉴바를 만들어줍니다.

{% load i18n %}

...
<ul class="dropdown-menu" aria-labelsedby="navbarDropdown">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
        <li>
                <a class="dropdown-item" href="/{{ language.code }}/">
                        {{ language.name_local }}
                </a>
        </li>
        {% endfor %}
</ul>
...

 


 


 

5. 템플릿 작성

먼저 영어로 웹사이트를 모두 완성합니다. 

 

 


6. 웹사이트 스캔

웹사이트 내에 번역이 가능한 모든 단어나 문장을 스캔합니다.

cmd: django-admin makemessages --all

위 명령어를 입력하면, 2번에서 만들어 놓은 locale 폴더 안의 ko 폴더, en 폴더, es 폴더, fr 폴더, ja 폴더 각각에 LO_MESSAGES 폴더가 생기고, 그 안에는 django.po 파일이 생성됩니다. 그럼 각각의 언어 폴더 안에 있는 django.po 파일을 열고, 안에 있는 문자열을 해당 언어로 번역합니다.

 

 


7. 번역한 문자열 웹사이트에 반영

모든 번역 작업이 끝났다면, 번역한 문자열들을 웹사이트에 반영해줘야 합니다.

cmd: django-admin compilemessages

제대로 작업이 완료됐다면, django.po 파일 옆에 django.mo 파일이 생성됩니다.

 

 

 


8. 작동 확인

로컬 서버를 가동한 뒤, 나브 바(navbar)에서 언어를 다른 언어로 선택해서 확인해봅니다.

 

* 확인 사항 *

url 주소 변화에 주목합니다.

한국어를 선택하면, http://127.0.0.1:8000/ko/

영어를 선택하면, http://127.0.0.1:8000/en

스페인어를 선택하면, http://127.0.0.1:8000/es/

프랑스어를 선택하면, http://127.0.0.1:8000/fr/

일본어를 선택하면, http://127.0.0.1:8000/ja

로 url 주소가 시작하는 것을 확인할 수 있어야 합니다.

 

* 확인 사항 *

언어를 선택할 때마다, navbar의 메뉴들도 각국의 해당 언어로 변환 가능합니다.