파이썬 gettext 이용하여 다국어 번역기 만들기
- Python
- 2019. 6. 27. 22:03
gettext란 ?
리소스를 적게 사용하여 다양한 언어로 번역할 수 있도록 개발된 리눅스 프로그램이다.
무려 1995년도에 만들어졌지만 아직까지 유용하게 쓰여지고 있다.
po 파일만 만들면 쉽게 지정한 언어로 번역을 할 수 있다.
po 파일을 쉽게 작성하기 위한 poedit(https://snapcraft.io/poedit)이라는 유틸리티도 있다.
- gettext 를 import 한 python 파일 만들기
print_('변수')로 작성한 내용이 po 파일에 생성된다.
# test_gettext.py
# -*- coding: utf-8 -*-
import gettext
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
t = gettext.translation('gettext_test', 'locale', languages=['ko'], fallback=True)
_ = t.ugettext
print _('HelloWorld')
print _('Python')
-
위의 py 파일이 있는 폴더로 이동하여 po 파일 생성 명령어 입력
~/practice $ xgettext -d gettext_test test_gettext.py
-
생성된 po 파일 확인
po 파일은 사람이 직접 읽고 편집할 수 있는 파일이며, 한개의 po 파일은 하나의 번역할 언어에 사용된다.~/practice $ ls test_gettext.py gettext_test.po
-
po 파일을 열어서 번역할 단어들을 1:1 매칭 시켜서 작성한다.
content-type과 Content-Transfer-Encoding 도 utf-8로 변경해준다.~/practice $ cat 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 <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-06-27 10:26+0800\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: utf-8\n" #: test_gettext.py:21 msgid "HelloWorld" msgstr "안녕디지몬" #: test_gettext.py:22 msgid "Python" msgstr "파이썬"
-
po 파일을 저장할 폴더 생성
한글 po 파일을 사용하기 위해 test_gettext.py 파일이 있는 아래 경로에서
/locale/ko_KR/LC_MESSAGES 경로를 만들어준다.mkdir -p /home/practice/locale/ko_KR/LC_MESSAGES
-
생성한 폴더로 gettext_tet.po 파일 복사
cp gettext_test.po /home/practice/locale/ko_KR/LC_MESSAGES/gettext_test.po
-
po 파일이 있는 위치에서 아래의 명령어 입력으로 gettext_test.mo 파일 생성
mo 파일은 프로그램에서 읽어들이는 파일이고, 바이너리 파일이다.cd /home/practice/locale/ko_KR/LC_MESSAGES/ $ msgfmt gettext_test.po -o gettext_test.mo
-
test_gettext.py 파이썬 파일 실행하여 번역된 내용확인
안녕디지몬 파이썬