[리눅스 번역].po -> .mo

mszeta의 이미지

.mo 파일의 이름을 정하는 데 규칙이 있나요?

페도라의 경우에 gtk**.po 같은 경우에는 gtk20.mo라고 되어있고요.
gnome-panel의 경우에는 gnome-panel-2.0.mo라고 되어있네요.

다른건 그냥 패키지명 그대로 따르는 경우도 있고요.

혹시 convention같은게 있나요?

감사합니다.

-----------------------------------------------------------------------------------------
실행을 위한 적용

이렇게 만들어진 mo 파일을 실행파일에 적용하기 위해서는 그 경로의 설정 또한 중요하다. 앞의 샘플 소스에서 언급했지만, 이 부분은 gettext가 적용되기 위해서 찾아가는 모든 경로에 대한 염두를 해 둬야 한다. strace(1) 을 사용하여 gettext 구동에 필요한 입출력이 어떻게 이루어지는지 확인하여 눈으로 익혀두는 방법을 권장한다.

위 샘플 코드를 기준으로, gettext가 적용되면 다음과 같은 입출력을 하게 된다:

"/usr/lib/locale/locale-archive" 를 검색한다
"/usr/share/locale/locale.alias" 즉, 로케일 명 alias 데이터베이스를 검색한다. 여기서 자신의 로케일명과 맞아 떨어지는 부분이 있으면 그 디렉토리를 검색하게 될 것이다.
"/usr/lib/locale/현재 LOCALE 환경 변수 명(+소문자:lower alphanumeric)/LC_*/PACKAGE상수값" 를 검색한다
그러다 없으면 "현재 작업 디렉토리/LOCALEDIR에 지정한 값(locales)/현재 로케일/LC_MESSAGES/PACKAGE상수값" 으로 찾는다
없으면 무시하고 그냥 소스에 적혀있는대로 출력하게 되고, 파일을 찾으면 번역을 해서 출력하게 된다.

shyblue의 이미지

convension이 있는지는 잘 모르겟습니다만, 기본적으로 mo file의 이름은 실세로 그 파일을 읽어들일 바이너리에서 지정된 이름입니다.

즉, 소스상에서 바인드해놓은 이름을 지키지 않으면 결과적으로 불러들일 수 없는겁니다.

setlocale(LC_ALL,"");   
 
bindtextdomain("test", "/usr/share/locale");   
textdomain("test");   

이런식으로 textdomain을 지정하는데, 지정된 도메인의 이름과 일치시켜 작업해서 배포하는것이죠.

時日也放聲大哭

時日也放聲大哭

mszeta의 이미지

aclocal.m4: AC_CHECK_LIB(intl, bindtextdomain,
configure: { echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5
configure:echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6; }
configure:if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then
configure:char bindtextdomain ();
configure:return bindtextdomain ();
configure: ac_cv_lib_intl_bindtextdomain=yes
configure: ac_cv_lib_intl_bindtextdomain=no
configure:{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5
configure:echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6; }
configure:if test $ac_cv_lib_intl_bindtextdomain = yes; then

------------------------------------
bindtextdomain이라는 검색어로 grep 명령어 써서 검색했는데 뭔지 모르겟네요.

shyblue의 이미지

위에서 찾으신건, autoconf가 현재 컴파일할 시스템에 bindtextdomain << 이란 함수를 지원하고 있는지를 테스트 하도록 하는 부분입니다.

소스상에서 domain을 지정하는 것과는 별개입니다.

時日也放聲大哭

時日也放聲大哭

mszeta의 이미지

grep -r "LC_MESSAGES" * 이렇게 찾아봤습니다.

mszeta의 이미지

po파일 이름과 동일하게 지정하는 건가요?

아무개.po라면 아무개.mo 이렇게요.

mszeta의 이미지

감사합니다. ^^