GNU version 의 gettext 인지 아닌지에 따라 차이점이 있다고 언급했다. 실제로는 이 차이때문에 message 변환이 안되기도 한다.
그 차이점은 messages.po 파일의 format 에 있다. non GNU version 의 gettext 를 사용하게 될때면 앞절에서 작성한 것처럼 msgid, msgstr 의 쌍으로도 충분하다. 그렇지만 GNU version 의 gettext 에서는 위처럼 해서는 원하는 결과를 얻을수없다.
xgettext 로 만들어진 messages.po 를 보자
non GNU messages.po
domain "messages" # File:Hello.c, line:22, textdomain("Hello"); msgid "Greeting" msgstr msgid "Hello" msgstr msgid "World!" msgstr |
GNU messages.po
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2002-11-13 15:09+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: Hello.c:26 msgid "Greeting" msgstr "" #: Hello.c:29 msgid "Hello" msgstr "" #: Hello.c:32 msgid "Wolrd!" msgstr "" |
GNU messages.po 에서는 사용자가 수정해주어야 할 사항들이 몇가지 더 있다. 기본 정보 이외에 CHARSET 을 지정해주어야 한다. 한국어 일 경우는 euc-KR 로 지정해 주어야 안전하다.
GNU 이냐 아니냐에 따라 작성법은 그다지 다르지 않다. 중요한것은 빌드 방법이다. GNU gettext 를 사용한다면 xgettext, msgfmt 도 GNU version 을 사용하여야 한다. non GNU gettext 를 사용한다면 역시 xgettext, msgfmt 도 gettext 와 같은 것을 사용하여야 한다. 그리고 C code 일 경우에는 빌드 할때 링크될 라이브러리를 직접 명시해 주는것이 안전하다. (GNU 일때는 GNU 라이브러리, non GNU 라이브러리 일때는 해당 라이브러리)
# example shell> gcc Hello.c -o Hello -lintl |