Skip to content

Gettext

컴퓨팅에서 gettext는 유닉스 계열 컴퓨터 운영 체제의 다국어 프로그램을 작성할 목적으로 흔히 쓰이는 국제화와 지역화 (i18n) 시스템이다. 가장 널리 쓰이는 gettext 구현물은 1995년 GNU 프로젝트가 공개한 GNU gettext이다.

Int the MaxOSX

MacOSX는 brew를 사용하여 설치한다.

$ brew install gettext

이 후, 아래와 같이 gettext/bin경로를 PATH에 추가하면 된다.

export PATH=${PATH}:/usr/local/opt/gettext/bin

How to recursive build

$ find . -iname *.po | sed -e 's;\(.*\)\.po$;\1\.po:-o:\1.mo;g' | awk -F':' '{print($1);print($2);print($3);}' | xargs -n 3 msgfmt

딕셔너리 디렉터리 구조

딕셔너리의 구조는 다음과 같다.

 +---- locale ----+--- en ---+--- LC_MESSAGES 
                  |
                  +--- kr ---+--- LC_MESSAGES ---+--- messages.mo
                                                 |
                                                 +--- messages.po

shell script 에서의 gettext 사용

#! /bin/sh
# Hello

TEXTDOMAINDIR=/usr/local/share/locale
TEXTDOMAIN=Hello
export TEXTDOMAINDIR
export TEXTDOMAIN

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

C code 에서의 gettext 사용

#include <libintl.h>
#include <locale.h>
#include <stdio.h>

int
main(void)
{
    /* 현재 호스트의 locale 을 사용한다. */
    setlocale(LC_ALL,"");

    /* Hello 의 message table 을 /usr/local/share/locale 아래에서 찾도록 한다. */
    bindtextdomain("Hello", "/usr/local/share/locale");
    textdomain("Hello");

    printf("original message : %s\n", "Greeting");
    printf("gettext trans  : %s\n", gettext("Greeting"));

    printf("original message : %s\n", "Hello");
    printf("gettext trans  : %s\n", gettext("Hello"));

    printf("original message : %s\n", "World!");
    printf("gettext trans  : %s\n", gettext("World!"));

    return 0;
}

See also

Favorite site