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 )