gettext에서 사용하는 다국어 지원을 위한 메시지 파일인 po 파일 편집기인 poedit를 정리 한다.


설치 가이드


Windows에서 poedit를 다운로드 하여 설치하는 것을 설명 한다.


poedit 설치

  • 다운로드 사이트에서 "poedit-1.4.2-setup.exe"을 다운로드 한다.
  • "poedit-1.4.2-setup.exe"를 실행한 후 "Next"를 선택하여 설치를 시작 한다. ![설치 시작](img/Poedit install 01.png)
  • 라이선스를 확인하고 "Next"를 선택 한다. ![라이선스](img/Poedit install 02.png)
  • 설치 폴더를 선택하고 "Next"를 선택 한다. ![설치 폴더](img/Poedit install 03.png)
  • "Full installation"을 선택한 후 "Next"를 선택 한다. ![설치 옵션](img/Poedit install 04.png)
  • 메뉴 폴더로 Poedit를 지정한 후 "Next"를 선택 한다. ![메뉴 폴더](img/Poedit install 05.png)
  • "Install"을 선택하여 실제 설치를 진행 한다. ![설치](img/Poedit install 06.png)
  • "Run Poedit now"를 선택한 후 "Finish"를 선택하여 설치를 종료 한다. ![설치 종료](img/Poedit install 07.png)
  • 처음으로 poedit가 실행될 때 사용 언어로 "Korean"을 지정 하여야 메뉴 등이 한글로 표시 된다. ![언어 선택](img/Poedit install 08.png)
  • 메시지를 읽고 "확인"은 선택 한다. ![안내 메시지](img/Poedit install 09.png)
  • 카탈로그(PO 파일)의 "Last-Translator"에 표시할 신상 정보를 입력 한다.
    • 이름 : 산사랑
    • 이메일 : consult(골뱅이)jopenbusiness.com
      ![신상 정보](img/Poedit 02.png)

주요 환경 설정


- 여러개의 관련 카탈로그(PO 파일)을 프로젝트로 등록하여 관리를 하려면 다음과 같이 한다.

- "파일 -> 카탈로그 관리자" 메뉴를 선택 한다.
- 카탈로그 관리자에서 붉은 네모 박스로 표시된 아이콘("번역 프로젝트 생성")을 선택 한다.

[500px|번역 프로젝트 생성](File:Poedit 10.png.md)
- 프로젝트 이름 : "koreanTranslation", 자신이 원하는 프로젝트 이름을 사용할 것
- 디렉토리 : 프로젝트에 해당하는 카탈로그(PO 파일)가 있을 경우 "둘러보기" 버튼을 선택하여 해당 PO 파일을 추가 한다.

[프로젝트 정보 등록](File:Poedit 11.png.md)
- poedit는 번역본 기억 장치(TM)을 지원 한다. TM을 사용하여 기존에 번역에 사용 하였던 정보로 손쉽게 초벌 번역이 가능하다. 아래와 같이 하여 TM을 생성할 수 있다.

- "파일 -> 선택사항" 메뉴에서 번역본 기억 장치(TM) 탭을 선택 한다.
- DB 경로 : c:/koreanTranslationDB, 번역본 기억 장치(TM)가 저장될 폴더를 지정 한다.
- 내 언어 : ko (korean), "추가" 버튼을 선택하여 사용할 언어를 지정 한다.

[번역본 기억 장치(TM)](File:Poedit 04.png.md)
- "데이터베이스 생성" 버튼을 선택 한다.
- 디폴트로 등록된 "C:"를 삭제 한다.
- "둘러보기"를 선택하여 PO 파일이 저장된 "c:/koreanTranslation"을 선택 한다.
"Next" 버튼을 선택 한다.
[로컬 파일이 저장된 디렉토리 추가](File:Poedit 05.png.md)
- 번역본 기억 장치(TM)를 생성할 번역 파일(PO 파일 또는 MO 파일)을 지정
- 번역본을 생성할 PO 파일을 지정 한다.
- "Finish" 버튼을 눌러 데이터베이스 생성을 종료 한다.
- 번역본 기억 장치의 DB 폴더가 c:/koreanTranslationDB 일 경우 구조

``` c:/koreanTranslationDB/ko 폴더 strings.db 파일 translations.db 파일 words.db 파일 ```
[번역 파일 추가](File:Poedit 06.png.md)



Poedit Pro와 비교




Poedit 2.0.6
가격 : $29.99 (1명이 최대 3대의 컴퓨터에서 사용 가능)
제공 기능
- 온라인 번역 기억 장소 제안
- WordPress 테마 또는 플러그인 번역 지원
- Crowdin에서 공동 번역 지원
- twig 양식에서 문자열 추출
- 단어 계수 및 통계


사용자 가이드



파일 메뉴

{| cellspacing="1" cellpadding="1" border="1" width="100%" |- |width="20%" bgcolor="cyan" align="center" valign="middle"|메뉴 |width="80%" bgcolor="cyan" align="center" valign="middle"|설명 |- |align="center"|카탈로그 관리자 |

  • 프로젝트 단위 그룹핑하여 카탈로그를 관리 한다.
  • 프로젝트 생성
    • 카탈로그 관리자에서 붉은 네모 박스로 표시된 아이콘("번역 프로젝트 생성")을 선택 한다.
      ![500px|번역 프로젝트 생성](img/Poedit 10.png)
    • 프로젝트 이름 : "koreanTranslation"
    • 디렉토리 : "둘러보기" 버튼을 선택하여 "c:/koreanTranslation/koreanProject.po"를 추가 한다.
      ![프로젝트 정보 등록](img/Poedit 11.png) |- |align="center"|새 카탈로그 |
  • 새 카탈로그(PO 파일)를 생성 한다.
    • 프로젝트 이름과 버전 : koreanProject, 카탈로그의 프로젝트 명
    • 팀 : pnus, 카탈로그 작성 팀명
    • 팀 메일 주소 : consult(골뱅이)jopenbusiness.com, 카탈로그 작성 팀의 메일 주소
    • 언어 : "Korean"
    • 국가 : "KOREA, REPUBLIC OF"
    • 문자코드 : "utf-8"
    • 소스 코드 문자코드 : "utf-8"
    • 문장내 복수 표시 형식 :
      ![새 카탈로그](img/Poedit 01.png)
  • 새 카탈로그를 c:/koreanTranslation/koreanProject.po 로 저장할 경우 파일 내용
    • koreanProject.po 파일은 utf-8 형태로 저장 된다.
      msgid ""
      msgstr ""
      "Project-Id-Version: koreanProject\n"
      "POT-Creation-Date: \n"
      "PO-Revision-Date: \n"
      "Last-Translator: 산사랑 \n"
      "Language-Team: pnus \n"
      "MIME-Version: 1.0\n"
      "Content-Type: text/plain; charset=utf-8\n"
      "Content-Transfer-Encoding: 8bit\n"
      "X-Poedit-Language: Korean\n"
      "X-Poedit-Country: KOREA, REPUBLIC OF\n"
      "X-Poedit-SourceCharset: utf-8\n"
      
      
|-
|align="center"|POT 파일로부터 새로운 카탈로그 작성...
|
- GNU Gettext 템플릿(~.pot) 파일로 부터 새로운 카탈로그(GNU Gettext 파일, ~.po)를 작성 한다.
|- |align="center"|열기... | - 카탈로그(GNU Gettext 파일, ~.po)를 연다.
|- |align="center"|저장 | - 현재 작성 중인 카탈로그(GNU Gettext 파일, ~.po)를 저장 한다.
|- |align="center"|다른 이름으로 저장... | - 카탈로그(GNU Gettext 파일, ~.po)를 다른 이름으로 저장 한다.
|- |align="center"|다른 형식으로 저장... | - 카탈로그(GNU Gettext 파일, ~.po)를 다른 형식(~.po.html)으로 저장 한다.
|- |align="center"|선택사항 | poedit의 기본 설정과 사용자 정보를 등록 한다.
- "개인 정보" 탭
- 이름 : 산사랑
- 이메일 : consult(골뱅이)jopenbusiness.com
![신상 정보](img/Poedit 02.png)
- "편집기" 탭
- 동작
- 저장할 때, .mo 파일 자동 생성 : 선택시 c:/koreanTranslation 폴더의 koreanProject.po를 저장할 경우 자동으로 koreanProject.mo 파일이 생성 된다.
- 카탈로그 업데이트 후 요약 정보 보기
- Poedit 시작시에 카탈로그 관리자 열기
- 항상 포커스를 입력창으로 옮김
- 주석을 수정 가능하게 합니다.
- CR/LF 변환
- 개행 서식 : '''유닉스''', MS 윈도우즈, 매킨토시, 현재 플랫폼 기본 사항
- 존재하는 카탈로그의 포맷을 변경하지 마세요
- 외부 편집기
- 편집기 실행파일
- 파일 뷰어에서 열지 않고, 편집기에서 소스 파일 열기
- 글꼴
- 번역 목록에 대한 사용자 글꼴
- 본문 영역에 대한 사용자 글꼴
![편집기](img/Poedit 03.png)
- "번역본 기억 장치(TM)" 탭
- 데이터베이스
- DB 경로 : c:/koreanTranslationDB, 번역본 기억 장치(TM)가 저장될 폴더
- 내 언어 : ko (korean), 아래 추가 버튼을 선택하여 사용할 언어를 지정 한다.
![번역본 기억 장치(TM)](img/Poedit 04.png) - "데이터베이스 생성" 버튼을 선택 한다.
- 디폴트로 등록된 "C:"를 삭제 한다.
- "둘러보기"를 선택하여 PO 파일이 저장된 "c:/koreanTranslation"을 선택 한다.
"Next" 버튼을 선택 한다. ![로컬 파일이 저장된 디렉토리 추가](img/Poedit 05.png) - 번역본 기억 장치(TM)를 생성할 번역 파일(PO 파일 또는 MO 파일)을 지정
- 번역본을 생성할 PO 파일을 지정 한다.
- "Finish" 버튼을 눌러 데이터베이스 생성을 종료 한다.
- 번역본 기억 장치의 DB 폴더가 c:/koreanTranslationDB 일 경우 구조

c:/koreanTranslationDB/ko 폴더 strings.db 파일 translations.db 파일 words.db 파일

![번역 파일 추가](img/Poedit 06.png)
  - 설정
- 누락된 최대 단어 수
- Max. difference in sentence length
- 카탈로드 업데이트할 때, 자동 번역

- "분석기" 탭
- 소스 코드를 분석하여 PO 파일을 생성할 때 필요한 정보를 관리 한다.
![분석기](img/Poedit 07.png) - Java 분석기 설정 예
![Java 분석기 설정 예](img/Poedit 08.png) - PHP 분석기 설정 예
![PHP 분석기 설정 예](img/Poedit 09.png) |- |align="center"|닫기 |poedit 프로그램을 종료 한다. |}
### 편집 메뉴 {| cellspacing="1" cellpadding="1" border="1" width="100%" |- |width="20%" bgcolor="cyan" align="center" valign="middle"|메뉴 |width="80%" bgcolor="cyan" align="center" valign="middle"|설명 |- |align="center"|원본을 번역창으로 복사 | - 번역을 하기 위해 선택한 메시지의 원본 메시지(msgid)를 번역 메시지(msgstr)로 복사 한다.
|- |align="center"|참조 보기 | - 선택한 메시지가 참조된 곳을 보여 준다.
|- |align="center"|찾기 | - 다양한 조건으로 문자열을 검색 한다.
|- |align="center"|모호한 번역 | - 선택한 메시지가 모호한 번역일 경우에 표시를 한다.
- poedit에서는 노란색 별표로 표시되며, PO 파일에서는 "#, fuzzy"라는 주석이 추가 된다.
|- |align="center"|주석 편집 | - 선택한 메시지의 주석을 편집 한다.
|}
### 카탈로그 메뉴 {| cellspacing="1" cellpadding="1" border="1" width="100%" |- |width="20%" bgcolor="cyan" align="center" valign="middle"|메뉴 |width="80%" bgcolor="cyan" align="center" valign="middle"|설명 |- |align="center"|소스로부터 업데이트 | - 카탈로그를 원본 소스(Java, PHP 등)로 부터 업데이트 한다.
|- |align="center"|POT 파일로부터 업데이트 | - 카탈로그를 POT 파일로부터 업데이트 한다.
|- |align="center"|TM을 사용하여 자동 번역 | - 생성된 번역본 기억 장치(TM)의 정보를 이용하여 초벌 번역을 한다.
|- |align="center"|삭제된 번역을 완전히 제거 |  |- |align="center"|설정 | - 프로젝트 정보 : 프로젝트의 기본 정보를 저장 한다.
- 경로 : 원본 소스(Java, PHP 등)의 경로를 저장 한다.
- 키워드 : 소스 파일에서 번역할 문자열을 인식할 키워드(함수명)를 저장 한다.
|}
### 보기 메뉴 {| cellspacing="1" cellpadding="1" border="1" width="100%" |- |width="20%" bgcolor="cyan" align="center" valign="middle"|메뉴 |width="80%" bgcolor="cyan" align="center" valign="middle"|설명 |- |align="center"|전체 화면 | - poedit를 전체 화면으로 표시 한다.
|- |align="center"|따옴표 보이기 | - msgid와 msgstr에 따옴표를 보여 준다.
|- |align="center"|줄번호 보이기 | - msgid의 줄번호를 보여 준다.
|- |align="center"|주석 창 보이기 | - 주석 창을 보여 준다.
|- |align="center"|자동 주석 창 보이기 |  |- |align="center"|음영으로 구분된 번역 리스트 |  |}
### 책갈피 메뉴 {| cellspacing="1" cellpadding="1" border="1" width="100%" |- |width="20%" bgcolor="cyan" align="center" valign="middle"|메뉴 |width="80%" bgcolor="cyan" align="center" valign="middle"|설명 |- |align="center"|책갈피 삽입 0, 1, ..., 9 | - 선택한 메시지를 책갈피 0번에서 부터 9번까지 지정 한다.
- 단축키로 Alt-0에서 Alt-9까지 사용 한다.
- PO 파일에서는 "X-Poedit-Bookmarks"가 추가되어 관리 되며, 책갈피에 해당하는 메시지 번호(0, 1, 2, ..., -1은 책갈피가 지정되지 않음을 표시함)가 저장된다.

0번 책갈피에 6번째 메시지(5)가 할당되었고



다른 책갈피에는 메시지가 할당되지 않았을 경우


"X-Poedit-Bookmarks: 5,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"

|-
|align="center"|책갈피로 바로 가기 0, 1, ..., 9
|
- 지정한 책갈피로 바로 간다.
- 단축키로 Ctrl-0에서 Ctrl-9까지 사용 한다.
|}
### 도움말 메뉴 {| cellspacing="1" cellpadding="1" border="1" width="100%" |- |width="20%" bgcolor="cyan" align="center" valign="middle"|메뉴 |width="80%" bgcolor="cyan" align="center" valign="middle"|설명 |- |align="center"|목차 및 검색 | - poedit의 영문 사용자 가이드를 보여 준다.
|- |align="center"|GNU gettext 문서 | - 영문 GNU gettext manual을 보여 준다.
|- |align="center"|Poedit 정보 | - 설치된 poedit의 정보를 보여 준다.
|}
## PO 파일 포맷
msgid ""
msgstr ""
"Project-Id-Version: /root/repo_git/SuiteCRM/lang_ko_kr_pack/include/language/ko_kr.lang.php\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-15 13:00+0900\n"
"PO-Revision-Date: 2015-08-15 13:00+0900\n"
"Last-Translator: 산사랑 <consult골뱅이jopenbusiness.com>\n"
"Language-Team: 산사랑 <consult골뱅이jopenbusiness.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#  translator-comments (주석)
#. extracted-comments
#: reference… (참조 파일 정보)
#, flag…
#| msgid previous-untranslated-string
msgid "원본 메시지"
msgstr "번역한 메시지"
빈라인
# 주석
msgid "원본 메시지"
msgid_plural "복수형 원본 메시지"
msgstr[0] "~"
msgstr[1](1.md) "~"


참고 문헌
- [http://www.gnu.org/software/gettext/manual/gettext.html#PO-Files](http://www.gnu.org/software/gettext/manual/gettext.html.md#PO-Files)

## 프로그램 매뉴얼
### PO 파일 생성 및 위치
PHP 파일에서 po 파일 생성
yum  install  gettext
xgettext --default-domain=index -k_ index.php
po 파일로 mo 파일 생성
msgfmt -o domain.mo domain.po

#--- po 파일을 mo 파일로 변환하기 msgfmt domain.po > domain.mo msgfmt domain.po -o domain.mo

#--- mo 파일을 po 파일로 변환하기 msgunfmt domain.mo > domain.po msgunfmt domain.mo -o domain.po

#--- po 파일을 pot 파일로 변환하기 msgfilter -i domain.po -o domain.pot true

#--- po 파일과 pot 파일을 병합하기 msgmerge --update domain.po domain.pot msgmerge --output-file=domain_new.po domain.po domain.pot






po 파일 위치
​​/usr/local/share/locale/ko_KR/LC_MESSAGE/mydomain.mo
1.  /usr/local/share/locale/ko_KR.UTF8/LC_MESSAGE/mydomain.mo
1. /usr/local/share/locale/ko/LC_MESSAGE/mydomain.mo


### PHP에서 po 파일 사용
PHP 환경 설정
vi  php.ini
extension=gettext.so

``` po 파일 사용 준비

bindtextdomain("mydomain", "/usr/local/share/locale");
1.  bindtextdomain("mydomain", dirname(__FILE__)."/locale");
bind_textdomain_codeset('mydomain', "UTF-8");
textdomain("mydomain");

po 파일 사용    

putenv("LANG=ko_KR.utf8");
setlocale(LC_MESSAGES, "ko_KR.utf8");
1.  putenv("LC_ALL=ko_KR.utf8");
1. setlocale(LC_ALL, "ko_KR.utf8");

gettext("~"); _("~");

Python에서 po 파일 사용

import gettext

gettext.bindtextdomain("mydomain", "/usr/local/share/locale") gettext.bind_textdomain_codeset("mydomain", "UTF-8") gettext.textdomain("mydomain")
gettext.gettext("~") _ = gettext.gettext _("~")


Linux Shell Script에서 po 파일 사용

#! /bin/bash
export TEXTDOMAINDIR=/usr/local/share/locale
export TEXTDOMAIN=mydomain

echo "$(gettext -s "Hello")"


xgettext 사용법



참고 문헌
- https://developer.mozilla.org/en-US/docs/gettext
- [http://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/xgettext-Invocation.html](http://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/xgettext-Invocation.html)


참고 문헌



- [오픈소스 한글화](오픈소스 한글화.md)
- 대표적인 PO 편집기

- [KBabel (GPL)](http://kbabel.kde.org/)
- [gtranslator](http://sourceforge.net/projects/gtranslator)

- [TMX 편집기](http://blog.saltlux.com/blog-ko/saltlux_life/saltlux_tc_news/tmx-%EC%83%9D%EC%84%B1-%EB%B0%8F-tm-%EC%A0%95%EB%A6%AC-%EC%89%BD%EA%B2%8C-%ED%95%98%EA%B8%B0/)
- [한국어 PO 파일 검사툴](http://kldp.net/projects/ko-po-check)

- [Computer-assisted translation](http://en.wikipedia.org/wiki/Computer-assisted_translation)
- [http://lexcode.com/bbs/zboard.php?id=okc8&page=1](http://lexcode.com/bbs/zboard.php?id=okc8&page=1)
- [OmegaT](http://www.thewordcracker.com/translation/free-computer-aided-tool-omegat/), SDL Trados, DejaVu, MomoQ 
- TMX (TM 데이터의 산업 표준 포맷)
- *[http://doc.mapeditor.org/reference/tmx-map-format/](http://doc.mapeditor.org/reference/tmx-map-format/)
- *[http://pythonhosted.org/tmx/](http://pythonhosted.org/tmx/)
- [https://github.com/vslavik/poedit](https://github.com/vslavik/poedit)
[[Category:오픈소스|Category:오픈소스]]
분류: [한글화](분류_한글화.md)
공유하기