본문 바로가기

IT/프로그래밍/Python

Python에서 I18N 적용하기

요즘 웹사이트나 프로그램들을 보면 다양한 언어를 지원하는 것을 많이 본다.

나도 개인적으로 진행중인 프로젝트에서 다국어를 지원해 보고자 시도했던 방법을

여기에 작성한다.

개발환경은 osx 10.9.5, python 2.7 이다.

python에는 gettext라는 기본 모듈이 있다. 해당 모듈을 사용하면 비교적 간단하게 다국어의 지원이 가능하다.

우선 gettext를 test할 파일을 만들어 보자. 파일명은 gettext_test.py 로 정했다.

# gettext_test.py
import gettext

t = gettext.translation('gettext_test', 'locale', languages=['ko'], fallback=True)
_ = t.ugettext

print _('__HelloWorld__')
print _('__Python__)

위의 코드에서 gettext.translation('gettext_sample', 'locale', languages=['ko'], fallback=True) 라고 쓰인 부분에 languages=['ko’] 가 프로그램 실행이 될때 출력될 언어형태를 지정한다.

languages=['ko’]를 제외하고서 코드를 작성하면 현재 OS의 언어형태에 맞추어서 출력이 된다.

현재 언어설정을 보는 법은 터미널에서 $ locale이라고 입력하면 된다.

(변경하는 방법에 대해서는 인터넷을 찾아보면 많이 나온다.)

어쨌든 위의 코드를 작성했으면 실행을 시켜보자, 실행시키면 아래와 같이 출력될거다.

__HelloWorld__
__Python__

별다른 문제없이 출력이 되었다면 터미널에서 gettext_test.py 가 있는 폴더로 이동을 하여

$ xgettext -d gettext_test gettext_test.py

라고 입력하면 gettext_test.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 

, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-06-18 21:32+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME 

\n"
"Language-Team: LANGUAGE 

\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"

#: gettext_test.py:7
msgid "__HelloWorld__"
msgstr ""

#: gettext_test.py:8
msgid "__Python__"
msgstr ""

위의 코드에서

"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"

부분은 기존의 코드에서 utf-8 만 추가를 한거다.

또한 해당 파일에서 msgid__HelloWorld__, __Python__ 가 보일것이다. msgstr 위치에 자신이 입력하고 싶은 글을 입력하자 본인은 아래와 같이 입력했다.

#: gettext_test.py:7
msgid "__HelloWorld__"
msgstr "안녕하세요."

#: gettext_test.py:8
msgid "__Python__"
msgstr "파이썬입니다."

수정이 끝났으면, gettext_test.py가 있는 폴더에 /locale/ko_KR/LC_MESSAGES/ 순으로 폴더를 생성하고 가장 하위 경로에 수정된 gettext_test.po 파일을 추가한다.

참고로 위의 경로는 대소문자 구분해서 똑같이 생성을 해준다.

이제 gettext_test.po가 있는 폴더에서 아래의 명령어를 입력한다.

$ msgfmt gettext_test.po -o gettext_test.mo

위와같이 입력을 하면 바이너리형식으로 변환된 .mo 파일이 생성이 되고,

gettext_test.py를 실행하면 아래와 같이 출력된다.

안녕하세요.
파이썬입니다.

영어로 바꾸어서 출력을 할때는 gettext_test.pylanguages=['ko']languages=['en'] 으로 변경한 뒤에 위에서 했던 데로 po파일의 msgstr을 영문으로 입력해 준뒤 binary 파일로 변환을 해주면 된다.

단. 경로는 /locale/en_US/LC_MESSAGES/ 로 생성해줘야 한다.


BlogWriter