CIPP

 view release on metacpan or  search on metacpan

bin/cipp-l10n  view on Meta::CPAN

    open (my $fh, $file) or die "can't read $file";
    my @values;
    while ( <$fh> ) {
        chomp;
        push @values, $_;
    }
    return @values;
}

sub scan_file {
    my ($file, $messages_href) = @_;

    $verbose && print STDERR "Reading file $file... ";

    open (my $fh, $file) or die "can't read $file";

    my $parser = CIPP::xGetText->new(
        object_type  => 'cipp',
        program_name => $file,
        project      => "dummy",
    );

    $parser->set_in_fh($fh);
    $parser->set_messages_href($messages_href);
    $parser->parse();
    
    close $fh;

    $verbose && print STDERR "done\n";
    
    1;
}

sub save_po_file {
    my ($messages_href, $filename, $domain_conf) = @_;

    $domain_conf ||= {};

    $verbose && print STDERR "Saving po file $filename... ";

    my $fh = \*STDOUT;

    if ( $filename ) {
        open ($fh, ">", $filename)
            or die "can't write '$filename'";
    }

    binmode $fh, ":utf8";

    my $domain           = $domain_conf->{domain}
                           || "PACKAGE";

    my $lang_team_email  = $domain_conf->{lang_team_email}
                           || "LANGUAGE TEAM <EMAIL\@ADDRESS>";

    my $msg_id_bug_email = $domain_conf->{msg_id_bug_email}
                           || "BUGS <EMAIL\@ADDRESS>";

    print $fh <<__EOH;
#. Generated with cipp-l10n - Copyright (C) dimedis GmbH
msgid ""
msgstr ""
"Project-Id-Version: $domain\\n"
"POT-Creation-Date: (null)\\n"
"PO-Revision-Date: (null)\\n"
"Last-Translator: TRANSLATOR NAME <EMAIL\@ADDRESS>\\n"
"Language-Team: $lang_team_email\\n"
"Report-Msgid-Bugs-To: $msg_id_bug_email\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"

__EOH

    foreach my $message ( sort {
                            $messages_href->{$a}->[0] cmp
                            $messages_href->{$b}->[0]
                          } keys %{$messages_href} ) {
        my $entries = $messages_href->{$message};
        foreach my $entry ( @{$entries} ) {
            print $fh qq[#: $entry\n];
        }

        if (  $message =~ m!\{.*\}! ) {
            print $fh qq[#, perl-brace-format\n];
        }

        if ( $message =~ /\n/ ) {
            print $fh qq[msgid ""\n];
            $message =~ s/^/"/gm;
            $message =~ s/\n/"\n/gm;
            $message .= qq["\n] if $message !~ /\n$/;
            print $fh $message;
        }
        else {
            print $fh qq[msgid "$message"\n];
        }
        print $fh qq[msgstr ""\n\n];
    }

    if ( $filename ) {
        close $fh;
    }

    $verbose && print STDERR "done\n";

    1;
}

sub check_l10n_conf {
    my ($conf) = @_;
    
    foreach my $base ( keys %{$conf} ) {
        if ( ! exists $conf->{$base}->{lang} ) {
            print Dumper($conf);
            die "Error: subtree '$base' has no language files";
        }
        if ( ! exists $conf->{$base}->{domain} ) {
            print Dumper($conf);
            die "Error: subtree '$base' has no text domain definition";
        }
    }
    
    1;
}

sub create_dir_for {
    my ($file) = @_;

    my $dir = dirname($file);
    
    if ( ! -d $dir ) {
        mkpath ([$dir], 0, 0775) or die "can't mkpath $dir";
    }

    1;
}

sub write_l10n_conf {
    my ($conf, $file) = @_;
    
    $verbose && print STDERR "Writing config file '$file'... ";
    
    create_dir_for($file);
    
    open (my $fh, ">", $file) or die "can't write $file";
    my $dd = Data::Dumper->new([$conf], ["l10n"]);
    $dd->Sortkeys(1);
    $dd->Indent(1);
    my $dump = $dd->Dump;
    $dump =~ s/^.*?\{/{/;
    print $fh $dump;
    close $fh;
    
    $verbose && print STDERR "Done\n";
    



( run in 1.649 second using v1.01-cache-2.11-cpan-5735350b133 )