无法通过debian包翻译我的程序,但使用autotools

时间:2017-01-26 19:38:52

标签: linux translation gettext autotools deb

我使用autotools作为构建系统我也在我的代码中使用gettext进行翻译。 我有几个.po文件( de.po,es.po和th.po )和autotools没问题让他们工作。之后:

./configure,
make 
sudo make install

程序和Translations .mo文件已安装。 测试我打开终端并更改语言环境,例如:

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

,翻译有效!

我使用相同的源代码debian deb包。 在。 posinst脚本中进行deb安装期间,我将翻译mo文件部署到语言环境目的地( docklight 是程序名称):

#!/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

生成的Translations .mo文件是正确的,并安装在该语言的语言环境文件夹中:

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

与使用autotools的构建过程完全相同。 测试语言后:

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

我的程序没有任何翻译。 我不知道问题出在哪里。 deb安装工作正常!

是否需要关注创建debian deb包?

据我了解,当你获得myprogramm.mo文件时,你应该翻译该程序。

有关于此的任何想法吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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");

谢谢大家。