파이썬 gettext 이용하여 다국어 번역기 만들기

gettext란 ? 

리소스를 적게 사용하여 다양한 언어로 번역할 수 있도록 개발된 리눅스 프로그램이다.

무려 1995년도에 만들어졌지만 아직까지 유용하게 쓰여지고 있다.

po 파일만 만들면 쉽게 지정한 언어로 번역을 할 수 있다.

po 파일을 쉽게 작성하기 위한 poedit(https://snapcraft.io/poedit)이라는 유틸리티도 있다. 


  1. 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')
  1. 위의 py 파일이 있는 폴더로 이동하여 po 파일 생성 명령어 입력

    ~/practice $ xgettext -d gettext_test test_gettext.py
  2. 생성된 po 파일 확인
    po 파일은 사람이 직접 읽고 편집할 수 있는 파일이며, 한개의 po 파일은 하나의 번역할 언어에 사용된다. 

    ~/practice $ ls
    test_gettext.py
    gettext_test.po
  3. 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 "파이썬"  
    
    
  1. po 파일을 저장할 폴더 생성
    한글 po 파일을 사용하기 위해 test_gettext.py 파일이 있는 아래 경로에서
    /locale/ko_KR/LC_MESSAGES 경로를 만들어준다.

    mkdir -p /home/practice/locale/ko_KR/LC_MESSAGES
  1. 생성한 폴더로 gettext_tet.po 파일 복사

    cp gettext_test.po /home/practice/locale/ko_KR/LC_MESSAGES/gettext_test.po
  2. po 파일이 있는 위치에서 아래의 명령어 입력으로 gettext_test.mo 파일 생성
    mo 파일은 프로그램에서 읽어들이는 파일이고, 바이너리 파일이다. 

    cd /home/practice/locale/ko_KR/LC_MESSAGES/ 
    $ msgfmt gettext_test.po -o gettext_test.mo
  3. test_gettext.py 파이썬 파일 실행하여 번역된 내용확인

    안녕디지몬
    파이썬

 

댓글

Designed by JB FACTORY