package Dist::Zilla::App::Command::msg_scan; # ABSTRACT: Collect localization strings into a translation template use Dist::Zilla::App -command; use strict; use warnings; use Moose; use namespace::autoclean; our $VERSION = '0.85'; with 'Dist::Zilla::Role::PotWriter'; sub command_names { qw(msg-scan) } sub abstract { 'scan localization strings into a translation template' } sub usage_desc { '%c %o' } sub opt_spec { return ( [ 'xgettext|x=s' => 'location of xgttext utility' ], [ 'encoding|e=s' => 'charcter encoding to be used' ], [ 'pot-file|pot|p=s' => 'pot file location' ], [ 'copyright-holder|c=s' => 'name of the copyright holder' ], [ 'bugs-email|b=s' => 'email address for reporting bugs' ], ); } sub validate_args { my ($self, $opt, $args) = @_; require IPC::Cmd; my $xget = $opt->{xgettext} ||= 'xgettext' . ($^O eq 'MSWin32' ? '.exe' : ''); $self->zilla->log_fatal( qq{Cannot find "$xget": Are the GNU gettext utilities installed?} ) unless IPC::Cmd::can_run($xget); if (my $enc = $opt->{encoding}) { require Encode; $self->zilla->log_fatal(qq{"$enc" is not a valid encoding}) unless Encode::find_encoding($enc); } else { $opt->{encoding} = 'UTF-8'; } } sub execute { my ( $self, $opt ) = @_; require Path::Class; my $dzil = $self->zilla; my $plugin = $self->zilla->plugin_named('LocaleTextDomain') or $dzil->log_fatal('LocaleTextDomain plugin not found in dist.ini!'); my $pot_file = Path::Class::file($opt->{pot_file} || ( $plugin->lang_dir, $self->zilla->name . '.pot' )); $plugin->log("extracting gettext strings into $pot_file"); $self->write_pot( to => $pot_file, xgettext => $opt->{xgettext}, encoding => $opt->{encoding}, copyright_holder => $opt->{copyright_holder}, bugs_email => $opt->{bugs_email}, ); } 1; __END__ =head1 Name Dist::Zilla::App::Command::msg_scan - Scan localization strings into a translation template =head1 Synopsis In F: [LocaleTextDomain] textdomain = My-App lang_dir = po On the command line: dzil msg-scan =head1 Description This command scans your distribution's Perl modules and creates or updates a L-style language translation template. It relies on the settings from the L plugin|Dist::Zilla::Plugin::LocaleTextDomain> for its settings, and requires that the GNU gettext utilities be available. =head2 Options =head3 C<--xgettext> The location of the C program, which is distributed with L. Defaults to just C, which should work if it's in your path. =head3 C<--encoding> The encoding to assume the Perl modules are encoded in. Defaults to C. =head3 C<--pot-file> The name of the template file to write to. Defaults to C<$lang_dir/$textdomain.pot>. =head3 C<--copyright-holder> Name of the application copyright holder. Defaults to the copyright holder defined in F. =head3 C<--bugs-email> Email address to which translation bug reports should be sent. Defaults to the email address of the first distribution author, if available. =head1 Author David E. Wheeler =head1 Copyright and License This software is copyright (c) 2012-2013 by David E. Wheeler. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut