如何本地化perl包(tar.gz)

如何本地化perl包(tar.gz),perl,localization,package,gettext,Perl,Localization,Package,Gettext,假设我有由h2xs-AX myscript生成的myscript.tar.gz包,其中包含bin/myscript.pl和lib/MyPackage/MyModule.pmMakefile.PL和MANIFEST手动编辑,因此我能够安装该软件包并运行myScript.PL myscript.pl: #!/usr/bin/perl use strict; use warnings; use MyPackage::MyModule; my $generator = MyPackage::MyMod

假设我有由
h2xs-AX myscript
生成的
myscript.tar.gz
包,其中包含
bin/myscript.pl
lib/MyPackage/MyModule.pm
Makefile.PL
MANIFEST
手动编辑,因此我能够安装该软件包并运行
myScript.PL

myscript.pl:

#!/usr/bin/perl
use strict;
use warnings;
use MyPackage::MyModule;

my $generator = MyPackage::MyModule->new();
my $value = $generator->getValue();

#And the message to be translated/localized
print "Obtained value was $value";
如何本地化我的包

我读到了这篇文章:很相似,但有点过时了。我还尝试了libintrl perl中的示例,但我对此并不明智,无法使其正常工作。

多亏了@Håkon:

解决方案:Dist:Zilla-代替h2xs方法。 在使用Debian的情况下,这些包是必需的:
libdist-zilla-perl-libdist-zilla-localetextdomain-perl-libdist-zilla-plugin-localemsgfmt-perl

首先从dzil init开始

$ dzil setup
接下来,创建一个新包:

$ dzil new myscript
然后基本上遵循 在要翻译的脚本/模块中使用:

use Locale::TextDomain "myscript";
#and format strings like this:
print __ "Obtaining value...";
print __x("Obtained value was {value}", value => $value);
$ dzil msg-scan
将此添加到
dist.ini

[LocaleTextDomain]
textdomain = myscript
扫描要翻译的消息/字符串:

use Locale::TextDomain "myscript";
#and format strings like this:
print __ "Obtaining value...";
print __x("Obtained value was {value}", value => $value);
$ dzil msg-scan
初始化语言翻译文件:

$ dzil msg-init en us ...
翻译
po/
目录中的
*.po
文件

可能测试:

$ dzil msg-compile po/en.po
$ LANGUAGE=en perl -Ilib -CAS -I. bin/myScript.pl
然后删除语言测试目录

$ rm LocaleData/ -r
现在只需创建包:

$dzil release 
享受美丽的.tar.gz套餐。 在发布过程中,Dist::Zilla提供将模块上载到,但默认为不上载(仍在研究如何防止提供)

它实际上更方便-没有包含文件的清单,只需将它们扔到
lib/
bin/
-这很神奇!)


我希望其他人也会觉得这很有用。

我没有使用本地化,但在谷歌搜索后我找到了。这是您可以使用的吗?我没有使用Dist::Zilla的经验,所以在发布问题之前第一次尝试时失败了。但它似乎起作用了,谢谢。很高兴听到这个消息!请考虑一下。(单击下面的蓝色按钮
“回答您的问题”