django 3.1 다국어 사용
* 확인사항:
django에서 다국어지원을 위해서는 os에 gettext가 설치되어 있어야 한다.
django에서 다국어 지원을 위해 settings.py에 아래 내용을 추가해야 한다.
cat project/settins.py from django.utils.translation import ugettext_lazy as _ ... MIDDLEWARE = [ ... 'django.middleware.locale.LocaleMiddleware', ... ] # adding for i18n LANGUAGES =[ ('ko', _('Korean')), ('en', _('English')), # ('zh-CN', _('Simplified Chinese')), ] LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), )
설정후, 아래 명령을 실행하면, locale 디렉토리가 만들어진다. 처음에 한글, 영어, 중국어 세가지를 설정으나 중국어가 제대로 작동하지 않아 주석처리했다.(아는 분 계시면 답글로 좀 알려주시길!)
$ python manage.py makemessages -l ko processing locale ko $ python manage.py makemessages -l en processing locale en
locale 디렉토리아래에, 언어별로, .po 파일이 만들어지며 야래와 같은 내용이 있다.
cat project/locale/ko/LC_MESSAGES/django.po # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-08-20 10:23+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: miraeqr/settings.py:139 msgid "Korean" msgstr "" #: miraeqr/settings.py:140 msgid "English" msgstr ""
views.py 에 테스트용 view를 만든다.
class TestView(TemplateView): template_name = 'test.html'
template/test.html 을 만든다. 템플릿 파일의 윗부분에, {% load i18n %} 태그를 추가한다.
{% load i18n %} {% block content %} <h2>{% trans "title" %}</h2> Title is translated!!! {% endblock %}
이제, 언어 설정 파일에 아래 내용을 추가해준다.
project/locale/ko/LC_MESSAGES/django.po #: project/templates/test.html:5 msgid "title" msgstr "다국어지원테스트" project/local/en/LC_MESSAGES/django.po #: project/templates/test.html:5 msgid "title" msgstr "Multi-Language Test"
언어파일을 컴파일해준다. 그러면 .mo 파일이 만들어진다.
./manage.py compilemessages
이제, 브라우저를 열어 확인하면 title에 한글 페이지가 보인다.
브라우저 설정을열고 언어를 영어로 변경하면 영어 페이지가 보인다.
1 comment
https://fueled.com/blog/supporting-multiple-languages-django%E2%80%8A-%E2%80%8A2/ 를 참고하여,
중국어 설정은 아래와 같이 하였더니 작동함.
settings.py 언어 설정에 아래 추가.
(‘zh-cn’, _(‘Simplified Chinese’)),
그리고 아래 명령어로 .po 파일을 생성한다. 이때, 작은따옴표와 대문자 소문자 구별해야한다.
python manage.py makemessages -l ‘zh_CN’
그리고, po 파일에 중국어 번역하고, compilemessages 하면 잘 됨.