2017-01-26 15 views
1

저는 autotools를 빌드 시스템으로 사용합니다. 번역을 위해 gettext를 사용합니다. 나는 몇 가지 .po 파일 (de.po, es.po 및 th.po)을 가지고 있으며 autotools를 사용하여 문제없이 작동시킵니다. 이후 :내 프로그램을 데비안 패키지로 번역 할 수는 없지만 autotools로 할 수 있습니다

./configure, 
make 
sudo make install 

프로그램과 번역 .mo 파일이 설치됩니다.

$ export LANG=de_DE.UTF-8 
$ ./myprogram 

및 번역 작품 : 내가 터미널을 열고 로케일 예컨대을 변경 테스트하려면 !.

나는 debian deb 패키지와 같은 소스 코드를 사용한다. 에 deb 설치 도중.

#!/bin/bash 
set -e 
# check for locale dir (LIVE SYSTEMS don't have it) 
if [ -d "/usr/local/share/locale" ]; then 
    podir="/usr/lib/docklight/docklight.data/po" 
    if [ -d ${podir} ]; then 
     cd ${podir} 
     PO_LINGUAS=$(if test -r LINGUAS; then grep -v "^\#" LINGUAS; fi) 
     linguas=$PO_LINGUAS 
     for lang in $linguas; do 

      dir=/usr/local/share/locale/$lang/LC_MESSAGES; 

      # check for locale dir (LIVE SYSTEMS don't have it) 
      if [ ! -d $dir ]; then 
       continue; 
      fi 

      # check for po file 
      if [ ! -f "$lang.po" ]; then 
       continue; 
      fi 

      file=`echo $lang | sed 's,.*/,,'`.gmo \ 
      && rm -f $file && /usr/local/bin/msgfmt -o $file "$lang.po" 

      /bin/bash install-sh -d $dir; \ 
      if test -r $lang.gmo; then \ 
       /usr/bin/install -c -m 644 $lang.gmo $dir/docklight.mo; \ 
       echo "installing $lang.gmo as $dir/docklight.mo"; \ 
       else \ 
       /usr/bin/install -c -m 644 ./$lang.gmo $dir/docklight.mo; \ 
       echo "installing ./$lang.gmo as" \ 
       "$dir/docklight.mo"; \ 
      fi 

     done  
    fi 
fi 

생성 된 번역 .mo 파일이 올바른지과의 로케일 폴더에 설치 얻을 : posinst 스크립트 내가 로케일 대상으로 번역 모 파일을 배포 (docklight 프로그램 이름입니다) 언어 :

dir=/usr/local/share/locale/$lang/LC_MESSAGES; 

정확도는 autotools로 빌드 프로세스와 동일합니다. 언어를 테스트 한 후 :

$ export LANG=de_DE.UTF-8 
$ ./myprogram 

내 프로그램은 어떤 번역이 없습니다. 어디에 문제가 있는지 알 수 없습니다. deb 설치가 올바로 작동합니다!

은 내가 debian deb 패키지를 만드는 데 더 신경을 써야 할 것이 무엇입니까?

내가 이해하는 한, myprogramm.mo 파일을 얻을 때 프로그램을 번역해야합니다.

그에 대한 아이디어가 있습니까?

미리 도움을 청하십시오.

답변

0

해결 방법을 찾으려면 : mo 파일이있는 PROGRAMNAME_LOCALEDIR 경로를 설정하기 만하면됩니다. gettext 초기화가 mo 파일을 찾을 수 있고 모든 것이 변환됩니다. 작품!

bindtextdomain(GETTEXT_PACKAGE, PROGRAMNAME_LOCALEDIR); 
    %s\n",domain,GETTEXT_PACKAGE,PROGRAMNAME_LOCALEDIR); 
    bind_textdomain_codeset - set encoding of message trans‐lations 
    btdcodeset = bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); 

감사합니다.