使用gettext / intltool本地化一个包?

时间:2013-06-17 11:04:03

标签: localization gettext

我正在尝试在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。 请帮忙解决这个问题。

2 个答案:

答案 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