我使用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文件时,你应该翻译该程序。
有关于此的任何想法吗?
提前感谢您的帮助。
答案 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");
谢谢大家。