我正在尝试在linux中本地化我的程序。该项目遵循gnu结构(希望如此)
$ tree -d
.
|-- autom4te.cache
|-- build-aux
|-- data
|-- help
| `-- C
| `-- images
|-- images
|-- m4
|-- po
`-- src
现在,我想本地化我的package.desktop.in
$ cat data/package.desktop.in
[Desktop Entry]
_Name=package
_GenericName=package
_X-GNOME-FullName= Editor
_Comment=Editor file
_Keywords=Editor
Exec=editor
Icon=editor
Terminal=false
Type=Application
Categories=GNOME;GTK;Utility;
StartupNotify=true
X-GNOME-UsesNotifications=true
我的帮助/ Makefile.am包含:
HELP_LINGUAS = bn_IN
现在,我尝试使用gettext
创建.pot文件:
po]$ xgettext -o package.pot package.desktop.in
xgettext: warning: file `packege.desktop.in' extension `desktop' is unknown; will try C
xgettext: error while opening "package.desktop.in" for reading: No such file or directory
带
$ cat POTFILES.in
data/package.desktop.in
[type: gettext/glade]data/package-menus.ui
data/org.package.gschema.xml.in
我的数据/包含:
$ tree ../data/*
../data/main-window.ui [error opening dir]
../data/Makefile [error opening dir]
../data/Makefile.am [error opening dir]
../data/Makefile.in [error opening dir]
../data/package.desktop [error opening dir]
../data/package.desktop.in [error opening dir]
../data/package.png [error opening dir]
../data/packege.svg [error opening dir]
../data/org.package.gschema.xml [error opening dir]
../data/org.package.gschema.xml.in [error opening dir]
我也尝试过intltool,也失败了。
我关注this。 请帮忙解决这个问题。
答案 0 :(得分:0)
虽然我不知道* .in文件是什么,Gettext的xgettext
工具只能从一组有限的语言中提取字符串,而且它的目的是寻找特定的关键字/函数。 (注意你的错误,它会“尝试C”)
您可以强制使用某种语言,例如--language=java
但我认为你的格式会不顺利。
您的文件看起来像语言包而不是原始源代码,因此请尝试将其重命名为* .properties和converting it。
答案 1 :(得分:0)
您需要在intltool-extract
之前使用xgettext
,如下所示:
# prepare the *.desktop file to be used with intltool-extract
sed -r -e '/^(Name|Comment)\[/d' \
-e 's/^(Name|Comment)/_\1/' \
package.desktop > package.desktop.in
# you are missing this step; it creates a *.h file xgettext can parse
intltool-extract --type=gettext/ini package.desktop.in
# then you do
xgettext --keyword=N_:1 --join-existing --output messages.pot package.desktop.in.h
# combine new strings with existing translations
for POFILE in *.po; do msgmerge --update $POFILE messages.pot ; done
# and finally merge back into the desktop file
intltool-merge --desktop-style . package.desktop.in package.desktop
改编自https://github.com/gottcode/xfce4-whiskermenu-plugin/blob/master/po/update-po.sh