代码之家  ›  专栏  ›  技术社区  ›  Kuncík

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

  •  1
  • Kuncík  · 技术社区  · 8 年前

    假设我有 myscript.tar.gz 程序包由生成 h2xs -AX myscript 包含 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";
    

    如何本地化我的包?

    我读到: How can I add internationalization to my Perl script? 同样,但它有点过时了。我还尝试了libintrl-perl中的示例,但我对此并不明智,无法使其工作。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Kuncík    8 年前

    感谢@Hkon:

    解决方案: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 
    

    享受美丽的焦油。gz包。 在发布过程中,Dist::Zilla提供将模块上载到 PAUSE ,但默认为不上传(仍在考虑如何阻止该提议)。

    它实际上更方便-没有MANIFEST来包含文件,只需将它们放到 lib/ bin/ -真神奇!:)

    我希望其他人也会发现这很有用。