[Rt-commit] r17354 - rt/3.8/trunk/sbin
clkao at bestpractical.com
clkao at bestpractical.com
Thu Dec 25 05:21:11 EST 2008
Author: clkao
Date: Thu Dec 25 05:21:11 2008
New Revision: 17354
Modified:
rt/3.8/trunk/sbin/merge-rosetta.pl
Log:
more po fudging when merging from rosetta.
Modified: rt/3.8/trunk/sbin/merge-rosetta.pl
==============================================================================
--- rt/3.8/trunk/sbin/merge-rosetta.pl (original)
+++ rt/3.8/trunk/sbin/merge-rosetta.pl Thu Dec 25 05:21:11 2008
@@ -1,26 +1,54 @@
#!/usr/bin/perl -w
use strict;
use LWP::Simple 'getstore';
+use Locale::PO;
+use Locale::Maketext::Extract;
use Archive::Extract;
use File::Temp;
use File::Copy 'copy';
-my $url = shift or die 'must provide rosseta download url';
+my $url = shift or die 'must provide rosseta download url or directory';
-my $dir = File::Temp::tempdir;
-my ($fname) = $url =~ m{([^/]+)$};
-print "Downloading $url\n";
-getstore($url => "$dir/$fname");
-print "Extracting $dir/$fname\n";
-my $ae = Archive::Extract->new(archive => "$dir/$fname");
-my $ok = $ae->extract( to => $dir );
+my $dir;
+
+if ($url =~ m/http/) {
+ $dir = File::Temp::tempdir;
+ my ($fname) = $url =~ m{([^/]+)$};
+ print "Downloading $url\n";
+ getstore($url => "$dir/$fname");
+ print "Extracting $dir/$fname\n";
+ my $ae = Archive::Extract->new(archive => "$dir/$fname");
+ my $ok = $ae->extract( to => $dir );
+}
+else {
+ $dir = $url;
+}
+
+Locale::Maketext::Lexicon::set_option('use_fuzzy', 1);
+Locale::Maketext::Lexicon::set_option('allow_empty', 1);
for (<$dir/rt/*.po>) {
my ($name) = m/([\w_]+)\.po/;
my $fname = "lib/RT/I18N/$name";
+ my $tmp = File::Temp->new;
print "$_ -> $fname.po\n";
- copy($_ => "$fname.po");
+
+ # retain the "NOT FOUND IN SOURCE" entries
+ system("sed -e 's/^#~ //' $_ > $tmp");
+ my $ext = Locale::Maketext::Extract->new;
+ $ext->read_po($tmp);
+
+ my $po_orig = Locale::PO->load_file_ashash("$fname.po");
+ # don't want empty vales to override ours.
+ # don't want fuzzy flag as when uploading to rosetta again it's not accepted by rosetta.
+ foreach my $msgid ($ext->msgids) {
+ my $entry = $po_orig->{"\"$msgid\""} or next;
+ my $msgstr = $entry->dequote($entry->{msgstr}) or next;
+ $ext->set_msgstr($msgid, $msgstr)
+ if $ext->msgstr($msgid) eq '' && $msgstr;
+ }
+ $ext->write_po("$fname.po");
}
print "Merging new strings\n";
More information about the Rt-commit
mailing list