PySimpleGUI 및 Babel을 사용하여 번역이 포함된 Python 앱 만들기
4479 단어 i18nbabelpysimpleguipython
전체 Repo로 바로 이동하려는 경우 그렇게 할 수 있습니다TranslatedPySimpleGUI.
요구 사항
추가 사용자 조치 없이 메뉴에서 언어를 동적으로 변경할 수 있는 애플리케이션을 원합니다.
PySimpleGui를 사용하는 Python 앱
여기서 중요한 점은 언어가 변경되면 기존 창을 새 창으로 교체하는 것입니다. 이로써 텍스트도 새 언어로 업데이트됩니다.
def main_window(my_window=None):
menu_def = [_('&About'), [_('Close::close')]], [_('&Language'), ['&de', 'en']],
layout_mainwindow = [
[
[sg.Menu(menu_def, pad=(10, 10))],
[sg.Text(_('Select direction: '), key='txt_direction')], [sg.Combo([_('Left'), _('Right')], key='cmb_direction', size=20)],
[sg.Button(_('Close'), key='btn_close')],
]
]
new_window = sg.Window("Demo TranslatedPySimpleGui", layout_mainwindow, finalize=True)
if my_window is not None:
my_window.close()
return new_window
번역은 내장 함수와 함께 사용됩니다
gettext
.## Setup translations
localedir = 'locale'
translate = gettext.translation('messages', localedir=localedir, languages=['de'])
_ = translate.gettext
번역을 동적으로 변경하려면 필요할 때마다 _ 함수를 업데이트한 다음 창을 다시 만들어야 합니다.
elif event == 'de':
translate = gettext.translation('messages', localedir=localedir, languages=['de'])
_ = translate.gettext
print(_("Language changed to DE"))
window = main_window(window)
elif event == 'en':
translate = gettext.translation('messages', localedir=localedir, languages=['en'])
_ = translate.gettext
print(_("Language changed to EN"))
window = main_window(window)
번역
Babel을 사용하면 번역하려는 모든 텍스트를 편안하게 추출하고 번역할 수 있는 특정 언어 파일로 처리할 수 있습니다. 그런 다음 이러한 파일은 애플리케이션에서 사용되는 바이너리로 컴파일됩니다.
먼저 번역할 텍스트를 추출해야 합니다.
pybabel extract . -o locale/base.pot
필요한 두 번째 단계로 로케일이 아직 존재하지 않는 경우 원하는 로케일을 작성하십시오. 내 경우에는 'de' 및 'en':
pybabel init -l de -i locale/base.pot -d locale
세 번째로 1단계에서 생성된 텍스트로 로케일을 업데이트해야 합니다.
pybabel update -i locale/base.pot -d locale/
네 번째로 번역된 텍스트를 로케일(여기서는 de 및 en)의 messages.po 파일에 수동으로 추가해야 합니다.
다섯째, po 파일을 애플리케이션에서 사용되는 mo 바이너리로 컴파일해야 합니다.
pybabel compile -d locale
내demo app에서는 이를 bat 파일에서 자동화했습니다.
@ECHO OFF
ECHO Creating and Updating Translations
ECHO Initiating directory locale if necessary
if not exist locale\ (
mkdir locale\
)
ECHO Initiating base translation file
venv\Scripts\pybabel extract . -o locale/base.pot
if not exist locale\de\ (
echo Init Language DE
venv\Scripts\pybabel init -l de -i locale/base.pot -d locale
)
if not exist locale\en\ (
echo Init Language EN
venv\Scripts\pybabel init -l en -i locale/base.pot -d locale
)
ECHO Create and compile translations
venv\Scripts\pybabel update -i locale/base.pot -d locale/
:: Between these 2 steps you have to add the translations manually to e.g. locale/de/messages.po
venv\Scripts\pybabel compile -d locale
레포
방금 설명한 전체 코드는 다음 저장소에서 찾을 수 있습니다. TranslatedPySimpleGUI
Reference
이 문제에 관하여(PySimpleGUI 및 Babel을 사용하여 번역이 포함된 Python 앱 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/michburkhalter/creating-a-python-app-with-translations-using-pysimplegui-and-babel-1lo0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)