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 가 출력된다.