JMANI

python3.7 i18n gettext, gettext_windows 본문

Python3/국제화ᆞ현지화

python3.7 i18n gettext, gettext_windows

jmani 2022. 4. 29. 14:48

python 3.7.0

Windows

1. 국제화 대상 파일

# test.py
import gettext, gettext_windows

gettext_windows.setup_env() # window

t = gettext.translation('messages', 'locale')
_ = t.gettext

trans = _('translatable')
apple = _('apple')

 

2. *.pot file 생성

pybabel extract <대상 files>

-o : output file name

 

> mkdir locale

> pybabel extract <test.py> -o <locale/messages.pot> # create *.pot
> pybabel extract . -o <locale/messages.pot> # 현재 경로의 모든 파일

extracting messages from <your\path>\test.py
writing PO template file to locale/messages.pot

 

messages.pot



msgid "apple"   
msgstr ""

> 수정

msgid "apple"
msgstr "사과"

 

 

 

 

 

3. *.po file 생성

# create *.po
> pybabel init -l ko_KR -i <locale/messages.pot> -d locale

creating catalog locale\ko_KR\LC_MESSAGES\messages.po based on locale/messages.pot

 

4. *.mo file 생성

# create *.mo
> pybabel compile -f -d locale

compiling catalog locale\ko_KR\LC_MESSAGES\messages.po to locale\ko_KR\LC_MESSAGES\messages.mo

 

5. 실행

 

gettext.translation().install(<your application>)

# test1.py
import test
import gettext, gettext_windows

locale_path = 'locale'
gettext_windows.setup_env() # set windows env

lang = gettext_windows.get_language()

# domain: your *.mo file name
language = gettext.translation(domain='messages', localedir=locale_path, languages=lang)
language.install(test)

print(test.trans, test.apple)

번역가능한 사과

 

Linux

1. 국제화 대상 파일

# test.py
import gettext

t = gettext.translation('messages', 'locale')
_ = t.gettext

trans = _('translatable')
apple = _('apple')

 

2. *.pot file 생성

pybabel extract <대상 files>

-o : output file name

-k : keword 

 

when you use <get_resouce> instead of '_' in test.py, command 'pybabel extrac -k get_resource'​

get_resource = t.gettext
apple = get_resource('apple')

 

> mkdir locale

> pybabel extract <test.py> -o <locale/messages.pot> # create *.pot
> pybabel extract . -o <locale/messages.pot> # 현재 경로의 모든 파일
> pybabel extract . -o <locale/messages.pot> -k <get_resource># 번역할 keyword, default='_' or 'N_'

extracting messages from <your/path>\test.py
writing PO template file to locale/messages.pot

 

3. *.po file 생성

# create *.po
> pybabel init -l ko_KR -i <locale/messages.pot> -d locale

creating catalog locale/ko_KR/LC_MESSAGES/messages.po based on locale/messages.pot

 

4. *.mo file 생성

# create *.mo
> pybabel compile -f -d locale

compiling catalog locale/ko_KR/LC_MESSAGES/messages.po to locale/ko_KR/LC_MESSAGES/messages.mo

 

5. 실행

 

gettext.translation().install(<your application>)

# test1.py
import test
import gettext

locale_path = 'locale'

# domain: your *.mo file name
language = gettext.translation(domain='messages', localedir=locale_path)
language.install(test)

print(test.trans, test.apple)

번역가능한 사과

 

references

 

gettext — Multilingual internationalization services — Python 3.7.13 문서

The gettext module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. It supports both the GNU gettext message catalog API and a higher level, class-based API that may be more appropriate for Pyt

docs.python.org

 

gettext-py-windows in Launchpad

Registered 2010-01-27 by Alexander Belchenko This module helps to use standard Python gettext.py library on Windows. It obtains user language code suitable for gettext from current Windows settings. The module provides 2 functions: setup_env and get_langua

launchpad.net

 

Babel — Babel 2.10.1 documentation

 

babel.pocoo.org

 

'Python3 > 국제화ᆞ현지화' 카테고리의 다른 글

python 3.8 I18N gettext  (0) 2022.05.13
Comments