Как локализовать пакет Perl (tar.gz)

Допустим, у меня есть 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";

Как мне локализовать свой пакет?

Я прочитал это: Как мне добавить интернационализацию в свой сценарий Perl? и тому подобное, но вроде уже устарело. Я также пробовал пример из libintrl-perl, но я не разбираюсь в нем и не могу заставить его работать.


person Kuncík    schedule 12.05.2016    source источник
comment
Я не использовал локализацию, но после поиска в Google я нашел Dist::Zilla::LocaleTextDomain. Это то, что вы могли бы использовать?   -  person Håkon Hægland    schedule 01.06.2016
comment
У меня не было опыта работы с Dist :: Zilla, поэтому, когда я попробовал его в первый раз перед тем, как опубликовать вопрос, я потерпел неудачу. Но вроде работает спасибо.   -  person Kuncík    schedule 13.06.2016
comment
Рад слышать! Попробуйте ответить на свой вопрос. (Нажмите синюю кнопку "Answer your question" ниже)   -  person Håkon Hægland    schedule 13.06.2016


Ответы (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, но по умолчанию не загружать (все еще не понимаю, как предотвратить предложение).

На самом деле так удобнее - нет МАНИФЕСТА для включения файлов, просто закидывайте их в lib/ и bin/ - это волшебство! :)

Я надеюсь, что кому-то это тоже пригодится.

person Kuncík    schedule 13.06.2016