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

How to localize perl package (tar.gz)

假设我有 myscript.tar.gzh2xs -AX myscript 生成的包,其中包含 bin/myScript.pllib/MyPackage/MyModule.pmMakefile.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 的例子,但我对它不了解,无法让它工作。

感谢@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和 在要翻译的 script/module 中使用它:

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

扫描messages/strings待翻译:

$ 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/ - 太神奇了! :)

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