Go to the first, previous, next, last section, table of contents.


PO 틀 파일 만들기

소스코드를 준비한 다음, 프로그래머는 PO 틀 파일을 만든다. 이 절은 여기에서 xgettext를 사용하는 방법을 설명한다.

xgettext 프로그램 실행하기

xgettext [옵션] 입력파일 ...
`-a'
`--extract-all'
모든 문자열을 추출한다.
`-c [태그]'
`--add-comments[=태그]'
출력 파일의 주석문에 (혹은 키워드 줄의 앞에) tag를 첨가한다.
`-C'
`--c++'
C++ 방식의 주석문을 알아차린다.
`--debug'
c-formatpossible-c-format 플래그를 사용해 누가 이 문자열을 포맷 문자열로 표시했는지 알려준다. possible-c-format 플래그는 xgettext 프로그램이 결정하고, c-format은 프로그래머가 미리 써놓는 경우에 사용된다. 기본값으로 c-format 형태만이 사용된다. 번역자는 이런 자세한 사항에 신경쓸 필요가 없다.
`-d 이름'
`--default-domain=이름'
출력으로 (`messages.po' 대신에) `이름.po'을 사용한다. `-' 혹은 `/dev/stdout'이라는 도메인 이름은 출력을 `stdout'으로 쓰라는 뜻이다.
`-D 디렉토리'
`--directory=디렉토리'
소스 파일을 찾아서 읽기 전에 디렉토리로 이동한다. 하지만, 출력하는 `.po' 파일은 원래 디렉토리에 상대적인 위치로 쓰여질 것이다.
`-f 파일'
`--files-from=파일'
입력 파일의 이름을 명령행 대신에 파일에서 읽어들인다.
`--force'
메세지가 전혀 정의되지 않은 경우에도 출력한다.
`-h'
`--help'
이 도움말을 출력하고 종료한다.
`-I list'
`--input-path=list'
입력 파일을 찾을 디렉토리들을 열거한다.
`-j'
`--join-existing'
이미 존재하는 파일과 메세지를 합친다.
`-k word'
`--keyword[=keywordspec]'
찾을 추가 키워드 (keywordspec 없이 사용하면 기본 키워드를 쓴다는 뜻이다). keywordspec이 C 식별자(identifier) id인 경우, xgettextid 함수 혹은 매크로의 첫번째 인자인 문자열을 모두 찾는다. keywordspec`id:argnum'의 형태인 경우, xgettext는 매크로의 argnum번째 인자인 문자열을 찾는다. keywordspec`id:argnum,argnum2'인 경우, xgettextargnum1번째 인자와 argnum2번째 인자인 문자열을 찾고 그 두 문자열을 각각 단수/복수형 메세지로 취급한다. 일부러 끄지 않는 한 언제나 찾게 되는 기본 키워드는 gettext, dgettext:2, dcgettext:2, ngettext:1,2, dngettext:2,3, dcngettext:2,3, 그리고 gettext_noop이다.
`-m [문자열]'
`--msgstr-prefix[=문자열]'
문자열 혹은 ""을 msgstr 항목의 앞에 붙인다
`-M [문자열]'
`--msgstr-suffix[=문자열]'
문자열 혹은 ""을 msgstr 항목의 뒤에 붙인다
`--no-location'
`#: 파일이름:줄수' 줄을 쓰지 않는다.
`-n'
`--add-location'
`#: 파일이름:줄수' 줄을 쓴다 (기본 설정).
`--omit-header'
머리부분에 `msgid ""' 항목을 쓰지 않는다. 이 기능은 최종 .gmo 파일에서 소스간의 차이가 없어지므로 테스트 목적으로 좋다. 우리는 이런 파일들을 몇개 GNU gettext 패키지에 같이 포함할 수 있고, msgfmt으로 만든 결과는 같은 값을 다시 만들어야 한다.
`-p dir'
`--output-dir=dir'
출력 파일은 dir 디렉토리에 놓일 것이다.
`-s'
`--sort-output'
정렬된 출력을 만들고, 중복된 걸 지운다.
`--strict'
정확하고 Uniforum에 따르는 PO 파일을 만들어 낸다.
`-v'
`--version'
버전 정보를 출력하고 종료한다.
`-x 파일'
`--exclude-file=파일'
파일에 있는 항목은 제외된다.

추가 PO 파일의 찾기 경로는: `/usr/local/share/nls/src/'이다.

입력파일`-'이면, 표준 입력을 읽는다.

xgettext는 괴상한 경우도 처리할 수 있다. 예를 들어 전처리 매크로, 문자열을 연속해서 쓸때 ANSI 방식으로 문자열 붙이는 것, 그리고 연속된 문자열에서 줄 끝에 이스케이프 문자를 써서 줄을 바꾸는 것 등이다.

번역을 새로 시작할 때, 번역자는 `package.pot' 틀 파일을 `LANG.po' 파일로 복사한다. 그 다음에 번역자는 파일의 최초 주석문과 헤더 항목을 수정한다.

최초 주석문인 "SOME DESCRIPTIVE TITLE", "YEAR" 그리고 "FIRST AUTHOR <EMAIL@ADDRESS, YEAR"는 구체적인 정보를 담도록 수정되어야 할 것이다. 이 작업은 어떤 문서 편집기에서든지 할 수 있다; 만약 이맥스가 사용되고 PO 모드로 자동으로 전환되는 경우 (파일의 접미사에 따라 자동으로 PO 모드로 결정된다), M-x fundamental-mode를 타이프해서 PO 모드를 빠져나갈 수 있다.

PO 모드를 이용해서도 헤더 항목을 편집할 수 있다: 이맥스에서, M-x po-mode RET을 타이프하고 다시 RET을 타이프하면 헤더 항목을 편집한다. 다음 항목을 채워 넣어야 한다.

Project-Id-Version
해당 패키지의 이름과 버전이다.
POT-Creation-Date
xgettext가 이미 이 항목을 채워 넣을 것이다.
PO-Revision-Date
이 항목을 쓸 필요가 없다. 파일을 저장할 때 이맥스 PO 모드에서 이 항목을 채워 넣는다.
Last-Translator
여러분의 이름과 이메일 주소를 쓴다 (따옴표를 쓰지 않는다).
Language-Team
해당 언어의 영어 이름을 쓰고, 그 언어의 팀 이메일 주소를 쓴다. 번역을 시작하기 전에 번역팀과 연락해 보는 것이 좋다. 중복된 작업을 피하는 것 뿐만 아니라, 어려운 언어적인 문제에 대해 협조를 얻을 수 있을 것이다. 자유 번역 프로젝트에서는, 각 번역팀이 그들만의 메일링 리스트를 가지고 있다. 팀의 최신 목록은 자유 번역 프로젝트 홈페이지(`http://www.iro.umontreal.ca/contrib/po/HTML/')의 "National teams"에서 볼 수 있다.
Content-Type
`CHARSET'을 해당 언어의 문자 인코딩, 혹은 UTF-8으로 바꾼다. 이 필드는 msgmergemsgfmt 프로그램이 올바르게 동작하는 데 꼭 필요하고, 사용하고 있는 문자 인코딩이 번역자의 인코딩과 다른 사용자를 위해서도 필요하다 (section gettext가 사용할 출력 문자의 문자셋 지정하기). 여러분 로케일의 문자 인코딩은 쉘 명령어 `locale charmap'을 실행하면 알 수 있다. 만약 그 결과가 `C'이거나 `ANSI_X3.4-1968'(`ASCII', `US-ASCII'와 같다)이라면, 여러분의 로케일이 정확히 설정되지 않았다는 뜻이다. 이 경우에, 여러분의 번역팀에 어떤 문자셋을 쓸 지 물어 보기 바란다. `ASCII'는 라틴 어족의 언어를 제외한 어떤 언어에도 사용이 불가능하다. PO 파일은 국제화 기능이 그리 좋지 않은 운영체제에도 동작해야 하기 때문에, 문자 인코딩은 GNU libc와 GNU libiconv가 지원하는 문자 인코딩으로 제한된다. 그 인코딩은: ASCII, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-13, ISO-8859-15, KOI8-R, KOI8-U, CP850, CP866, CP874, CP932, CP949, CP950, CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257, GB2312, EUC-JP, EUC-KR, EUC-TW, BIG5, BIG5-HKSCS, GBK, GB18030, SJIS, JOHAB, TIS-620, VISCII, UTF-8. GNU 시스템에서는 각각의 언어에 대해 다음 인코딩이 주로 쓰인다. 따옴표나 쌍따옴표가 번역문에 사용되고, 로케일 인코딩이 ISO-8859-* 문자셋중의 하나라면, 해당 로케일의 인코딩 대신에 UTF-8 인코딩을 쓰는 편이 좋다. 왜냐하면 UTF-8에서는 진짜 따옴표 문자를 표현할 수 있기 때문이다 (따옴표: U+2018, U+2019, 쌍따옴표: U+201C, U+201D). 한편 ISO-8859-* 문자셋은 이런 문자를 모두 가지고 있지 못하다. UTF-8 로케일 사용자는 진짜 따옴표 문자를 볼 수 있을 것이고, ISO-8859-* 로케일 사용자는 대신에 수직으로 된 따옴표와 수직으로 된 쌍따옴표를 볼 수 있을 것이다 (문자셋 변환 기능이 그렇게 변환해 줄 것이다). 이 문자를 X11에서 입력하려면, xmodmap 프로그램을 사용해 키보드 매핑을 바꾸면 된다. 따옴표 문자의 X11 이름은 "leftsinglequotemark", "rightsinglequotemark", "leftdoublequotemark", "rightdoublequotemark", "singlelowquotemark", "doublelowquotemark"이다. 최신 버전의 GNU 이맥스만이 UTF-8 인코딩을 지원한다는 것에 유의한다: Mule-UCS를 포함한 이맥스 20이나, 이맥스 21이 지원한다. 2001년 2월 현재, X이맥스는 UTF-8 인코딩을 지원하지 않는다. 문자 인코딩 이름은 대문자 혹은 소문자로 쓰여질 수 있다. 보통 대문자로 쓰는 것이 좋다.
Content-Transfer-Encoding
8bit로 쓴다.
Plural-Forms
이 필드는 옵션이다. 이 필드는 PO 파일에 복수형이 있을 경우에만 필요하다. 복수형은 `msgid_plural' 키워드를 찾아보면 알 수 있다. 이 복수형 필드를 쓰는 형식은 section 복수형을 위한 함수들에 설명되어 있다.


Go to the first, previous, next, last section, table of contents.