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

时间:2016-05-12 11:48:30

标签: perl localization package gettext

我们说myscript.tar.gz包含h2xs -AX myscriptbin/myScript.pl生成的lib/MyPackage/MyModule.pm包。手动编辑Makefile.PLMANIFEST,以便我能够安装软件包并运行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";

如何本地化我的包裹?

我读到了这个:How can I add internationalization to my Perl script?等等,但它有点过时了。我也尝试过来自libintrl-perl的例子,但我并不是明智的,也无法让它发挥作用。

1 个答案:

答案 0 :(得分:1)

感谢@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

然后基本上跟随Dist::Zilla::LocaleTextDomain和 在脚本/模块中使用它来翻译:

use Locale::TextDomain "myscript";
#and format strings like this:
print __ "Obtaining value...";
print __x("Obtained value was {value}", value => $value);

将其添加到dist.ini

[LocaleTextDomain]
textdomain = myscript

扫描要翻译的消息/字符串:

$ 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提供将模块上传到PAUSE,但默认为不上传(仍在计算如何阻止该优惠)。

它实际上更方便 - 没有包含文件的MANIFEST只是把它们扔到lib/bin/ - 这太神奇了! :)

我希望其他人也能找到这个有用的东西。