App-I18N
view release on metacpan or search on metacpan
lib/App/I18N/Command/Auto.pm view on Meta::CPAN
package App::I18N::Command::Auto;
use warnings;
use strict;
use Encode;
use Cwd;
use App::I18N::Config;
use App::I18N::Logger;
use File::Basename;
use File::Path qw(mkpath);
use File::Find::Rule;
use REST::Google::Translate;
use base qw(App::I18N::Command);
sub options {
(
'f|from=s' => 'from',
't|to=s' => 'to',
'backend=s' => 'backend',
'locale' => 'locale',
'verbose' => 'verbose',
'msgstr' => 'msgstr', # translate from existing msgstr instead of translating from msgid.
'overwrite' => 'overwrite', # overwrite existing msgstr
'p|prompt' => 'prompt',
)
}
sub run {
my ( $self , $lang ) = @_;
my $logger = $self->logger();
unless( $lang ) {
return $logger->error( "Language name is required." );
}
unless( $self->{from} ) {
return $logger->error( "--from [Language] is required. please specify your language to translate." );
}
# XXX: check this option
$self->{backend} ||= 'rest-google';
my $podir = $self->{podir};
$podir = App::I18N->guess_podir( $self ) unless $podir;
$self->{mo} = 1 if $self->{locale};
mkpath [ $podir ];
my $pot_name = App::I18N->pot_name;
my $potfile = File::Spec->catfile( $podir, $pot_name . ".pot") ;
if( ! -e $potfile ) {
$logger->info( "$potfile not found." );
return;
}
my $from_lang = $self->{from};
my $to_lang = $self->{to} || $lang;
my $pofile;
if( $self->{locale} ) {
$pofile = File::Spec->join( $podir , $lang , 'LC_MESSAGES' , $pot_name . ".po" );
}
else {
$pofile = File::Spec->join( $podir , $lang . ".po" );
}
my $ext = Locale::Maketext::Extract->new;
$logger->info( "Reading po file: $pofile" );
$ext->read_po($pofile);
my $from_lang_s = $from_lang;
my $to_lang_s = $to_lang;
# ($from_lang_s) = ( $from_lang =~ m{^([a-z]+)(_\w+)?} );
# ($to_lang_s) = ( $to_lang =~ m{^([a-z]+)(_\w+)?} );
$logger->info( "Translating: $from_lang_s => $to_lang_s" );
$logger->info( "Initialing REST::Google" );
REST::Google::Translate->http_referer('http://google.com');
binmode STDERR, ":utf8";
NEXT_MSGID:
for my $i ($ext->msgids()) {
my $msgid = $i;
my $msgstr = $ext->msgstr( $i );
# skip if no msgstr and no overwrite.
next if $msgstr && ! $self->{overwrite} && ! $self->{msgstr};
# translate from msgstr
$i = $msgstr if $msgstr && $self->{msgstr};
$logger->info( "********" );
$logger->info( " msgid: $msgid");
$logger->info( " msgstr: $msgstr" ) if $msgstr;
$logger->info( " tranlating from msgstr" ) if $self->{msgstr};
$logger->info( " tranlating from msgid" ) if ! $self->{msgstr};
my $retry = 1;
( run in 2.311 seconds using v1.01-cache-2.11-cpan-5c0b1e786e0 )