4. gettext message table 작성법

gettext 를 통해 변활될 message 들을 담는 message table 을 작성하는 요령을 살펴본다.

gettext는 정해진 message 를 미리 정해진 message 로 바꾸어 주는 역할을 할뿐이다. 따라서 원본 message 와 이것이 어떤 message 로 변활될지를 나타내어 주는 table 이 필요하다. 이의 초안이 되는것이 *.po 에 해당하는 파일이다.

이 초안을 직접 작성할수도 있지만 xgettext 라는 프로그램이 그 초안을 만들어 준다.

# shell script
xgettext Hello
# C code
xgettext Hello.c

xgettext 를 사용하고 나면 messages.po 라는 파일이 생성된다. 이는 GNU version 의 gettext 인지 아닌지에 따라 약간 다르지만 뼈대는 비슷하다. msgid 와 msgstr 의 짝으로 이루어져 있으며, msgid 가 위 예제 프로그램 속에서 gettext 로 둘러싸인 message 들이다. 그리고 msgstr 이 변활될 메세지를 담게 된다. xgettext 를 하고 나면 msgid 들이 모두 추출되며, 사용자는 단지 msgstr 부분의 빈곳만 채워주면 된다. 다음과 같이 채워보자.

앞절의 프로그램들에서 Hello 와 World! 를 gettext 가 변환하기 위해서는 아래처럼 작성하면 된다.

msgid "Hello"
msgstr "헬로"

msgid "World!"
msgstr "월드!"

이제 이렇게 작성된 파일을 msgfmt 라는 프로그램을 이용하여 gettext 가 이해할수 있는 파일로 변환한다.

msgfmt -o Hello.mo messages.po

Hello.mo 라 한 이유는 프로그램의 이름과 같이 하기 위해서이다. 이제 이를 /usr/local/share/locale/ko/LC_MESSAGE/ 아래에 넣어두면 된다. 한국어로 locale 이 설정되어 있다면 ...locale/ko/ 아래를 참조하게 된다. 만약 프랑스어로 message translation 을 하고자 할 경우에는 해당 .po 파일의 msgstr 을 불어로 작성한다. 그리고 이를 msgfmt 로 Hello.mo 로 만든후 /usr/local/share/locale/fr/LC_MESSAGE/ 아래에 넣어두면 된다. 시스템 로케일에 따라 영어, 한국어, 혹은 불어 message 가 출력된다.