Home » TOOL » 기타 » poedit 프로그램으로 po 번역하는 방법을 알아봅시다.

poedit 프로그램으로 po 번역하는 방법을 알아봅시다.

po 파일은 번역을 위해 제공하는 파일입니다. 그런데, 번역을 하는 입장에서는 po 파일을 보는 것이 만만치 않을 수도 있습니다. 이럴 때 쓸 수 있는 것이 poedit 프로그램인데요. 이 프로그램의 사용 방법을 간단하게 알아봅니다.


po 파일 간단하게 보기

po 파일은 다국어 지원을 위해, 우리가 번역을 해야 하는 파일이라고 했습니다. 번역할 문구와 번역 결과를 적어주면 됩니다.

[그림 1] 몇 개의 문구가 추가된 main.py

몇 개의 번역 문구가 추가되었는데요. bye bye~와 hello {username}이 추가되었습니다. 여기서, s5는 동적으로 문자열이 들어갑니다. f-string은 인식을 안 하기 때문에, format 함수로 넣어줘야 합니다. 이 부분은 따로 언급하진 않겠습니다.

[그림 2] 예제 main의 결과

결과를 보겠습니다. 그랬더니, new game is started와 bye bye~, hello {username}이 번역이 되지 않았음을 알 수 있습니다. 왜 그럴까요? 이 글을 보면 알 수 있듯, po 파일도 업데이트 되지 않았고, mo 파일도 업데이트 되지 않았기 때문입니다.

xgettext로 locale/base.po 파일을 새로 만들고요. msgmerge로 locale/ko/LC_MESSAGES를 merge 시킵니다. 이 파일을 다운 받아와서, notepad++ 프로그램으로 열어보겠습니다.

[그림 3] body.po 파일

그러면, #: main.py:9 가 있고, msgid와 msgstr이 있습니다. 그리고, 몇 가지의 정보가 더 들어가는 경우도 있는데요. 각 요소들에 대해 천천히 설명해 보도록 하겠습니다.

  • #: main.py:9
    • main.py의 9번째 줄에서 gettext로 번역할 문장을 추출했다는 의미입니다.
  • msgid
    • 메세지의 id를 의미합니다. 번역할 문장을 의미합니다.
  • msgstr
    • 번역 결과를 의미합니다.

msgId와 msgstr은 한 쌍으로 다니게 됩니다. 마치 map에서의 key, value 처럼요. 여기까지 이해 되셨다면, 이 글에 나오는 메타 정보들을 아래에서 소개해 드리겠습니다.

  • #, python-brace-format
    • 파이썬의 중괄호 format을 의미합니다.
  • #, fuzzy
    • 번역이 되지 않는다는 것을 의미합니다. 이는 poedit로 파일을 수정하면서 다시 설명하겠습니다.

그런데, 이걸 vi에서 편집하기에는 상당히 어렵습니다. 쉽고 편리하게 하는 방법이 없을까요? 바로 poedit 라는 프로그램을 이용하는 것입니다.


poedit 사용해 보기

그러면, 이 프로그램을 사용해 보겠습니다. 해당 body.po 파일을 열어보겠습니다.

[그림 4] 홈 메뉴

홈 메뉴를 보면, 새로 만들기와 파일 찾아보기 등이 있습니다. 만약, po file이 제공된다면 파일 찾아보기를 누르시면 됩니다. body.po를 파일 찾아보기로 여시면 위와 같은 창이 하나 나오게 됩니다.

[그림 5] editor 프로그램으로 열어본 body.po

먼저 표를 보면, 왼쪽에 원본 텍스트, 오른쪽에 번역이 있습니다. new game is started. 가 원본이고, 번역에, 번역이 되어야 할 문구를 적어주면 되는 것입니다.

[그림 6] 작업 필요

작업 필요는, 이 텍스트는 번역하지 말라는 의미입니다. 즉, new game is started. 에 작업 필요를 선택하면, new game is started. 가 들어와도, 번역을 하지 않습니다. 저는 이 문구를 작업 필요로 설정해 놓겠습니다.

[그림 7] python 형식의 breaket

hello username의 경우, 파이썬 형식의 중괄호가 걸려 있네요. 이 경우, {변수 이름} 그대로 번역하면 됩니다. 위 예제에서는 어떻게 번역 창에 입력하면 될까요?

[그림 8] 변수는 그대로 입력

hello는 한국어로 안녕하세요. 입니다. 그리고 보통, 유저 이름 뒤에 님이 붙지요. 따라서, 이 경우, 안녕하세요 {username}님 정도로 번역해 주시면 됩니다. 보통, 이렇게 특수한 경우, 원본 텍스트 옆에 정보가 표시되니 참고하시면 되겠습니다.

이렇게 번역을 다 하시고 저장을 누르시면, body.po 파일이 바뀌게 됩니다.

[그림 9] 바뀐 po 파일

바뀐 po 파일을 보면, 2번째 new game is started. 위에 #, fuzzy가 붙었음을 볼 수 있어요. 번역 필요를 on으로 두시면, 이렇게 #, fuzzy가 붙어서 해당 문구를 만나도 번역을 하지 않게 되어요. 그리고 자동으로 mo 파일까지 같이 생성되는데요.

이 파일까지 줄 필요는 없습니다. 왜냐하면, 배포 과정에서, 자동으로 po 파일을 기반으로 재 컴파일을 하기 때문입니다.


배포해 보기

그러면, 실제 po 파일의 번역이 잘 반영되었는지 확인해 볼까요?

[그림 10] 새로운 body.po 파일 업로드 하기

먼저, 서버에 새로운 body.po 파일을 올립니다. 다음에, 여기에서 msgfmt 명령어를 쓸 거에요.

[그림 11] 컴파일 후 반영된 거 확인하기

msgfmt로 새로 바뀐 locale/ko/LC_MESSAGES 밑에 있는 body.po를 컴파일 해서, 같은 폴더 밑에 body.mo를 뽑아냅니다. 그리고 나서, main.py를 실행시키면 새로 문구가 번역되었음을 확인할 수 있습니다.

다만, new game is started. 는 번역되지 않았는데, fuzzy 처리되었기 때문입니다. 전반적인 번역 시스템을 간단하게 알고 싶으시다면 아래 글을 참고하셔도 좋겠습니다.

Leave a Comment

19 + 16 =