summaryrefslogtreecommitdiff
path: root/4.4-i18n-migration/regcat/regcat-i18n-merge-all.pl
blob: e44f72d3f77944514fdd0b659f890a312b03e2bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl -w

use strict;

my $dest_podir = '../../../../trunk/po';
my @src_pofiles = <*.po>;

foreach my $spo (@src_pofiles) {
    open(DPO, '<'.$dest_podir.'/'.$spo) or do {
        warn("no dest po $dest_podir.'/'.$spo");
        next;
    };
    open(SPO, '<'.$spo) or die("can't open source po $spo: $!");
    open(DPON, '>'.$dest_podir.'/'.$spo.'.new') or die("can't write to $dest_podir/$spo.new: $!");
    
    my %trans = ();
    while(my $line = <SPO>) {
        next if($line !~ /^msgid "(.*?)"$/);
        my $msgid = $1;
        $line = <SPO>;
        next if($line !~ /^msgstr "(.*?)"$/);
        my $msgstr = $1;
        
        $trans{$msgid} = $msgstr if(length($msgstr));
    }
    
    while(my $line = <DPO>) {
       if($line =~ /^msgid\s+"(.*?)"\s*$/) {
           my $msgid = $1;
           print DPON $line;
           $line = <DPO>;
           if(defined($trans{$msgid}) && $line =~ /^msgstr\s+""\s*$/) {
               my $msgstr = $trans{$msgid};
               print DPON qq(msgstr "$msgstr"\n);
           } else {
               print DPON $line;
           }
       } else {
           print DPON $line;
       }
    }
    
    close(DPO);
    close(SPO);
    close(DPON);
}