如何本地化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的经验,所以在发布问题之前第一次尝试时失败了。但它似乎起作用了,谢谢。很高兴听到这个消息!请考虑一下。(单击下面的蓝色按钮
“回答您的问题”
)