#!/usr/bin/perl -w use strict; use open ':utf8', ':std'; use PO4Moz::MozDTD; use PO4Moz::MozProp; use PO4Moz::ContentsRDF; use PO4Moz::Manifest; use PO4Moz::InstallRDF; use PO4Moz::HelpFile; use PO4Moz::HelpRDF; use PO4Moz::POfile; sub process_directory { my $english = shift; my $trans = shift; my $dir = shift; my %entries = @_; return %entries if (!-d "$english/$dir"); return %entries if (!-d "$trans/$dir"); opendir DIR, "$english/$dir"; my @direntries = sort(readdir DIR); closedir DIR; foreach my $file (grep { -f "$english/$dir/$_" && -f "$trans/$dir/$_" } @direntries) { %entries = process_file($english, $trans, "$dir/$file", %entries); } foreach my $newdir (grep { $_ ne "." && $_ ne ".." && -d "$english/$dir/$_" } @direntries) { %entries = process_directory($english, $trans, "$dir/$newdir", %entries); } return %entries; } sub process_file { my $english = shift; my $trans = shift; my $file = shift; my %entries = @_; $file =~ s/^(\.\/)*//; return %entries if ($file !~ /(\.(dtd|properties|rdf)|chrome\.manifest)$/); open F, "<$english/$file"; my @lines = ; close F; my $englishcontents = join "", @lines; open F, "<$trans/$file"; @lines = ; close F; my $transcontents = join "", @lines; my %newenglishentries = ("index" => []); my %newtransentries = ("index" => []); if ($file =~ /\.dtd$/) { %newenglishentries = PO4Moz::MozDTD::parse($file, $englishcontents); %newtransentries = PO4Moz::MozDTD::parse($file, $transcontents); } elsif ($file =~ /\.properties$/) { %newenglishentries = PO4Moz::MozProp::parse($file, $englishcontents); %newtransentries = PO4Moz::MozProp::parse($file, $transcontents); } elsif ($file =~ /contents\.rdf$/) { %newenglishentries = PO4Moz::ContentsRDF::parse($file, $englishcontents); %newtransentries = PO4Moz::ContentsRDF::parse($file, $transcontents); } elsif ($file =~ /chrome\.manifest$/) { %newenglishentries = PO4Moz::Manifest::parse($file, $englishcontents); %newtransentries = PO4Moz::Manifest::parse($file, $transcontents); } elsif ($file =~ /install\.rdf$/) { %newenglishentries = PO4Moz::InstallRDF::parse($file, $englishcontents); %newtransentries = PO4Moz::InstallRDF::parse($file, $transcontents); } elsif ($file =~ /\.xhtml$/) { %newenglishentries = PO4Moz::HelpFile::parse($file, $englishcontents); %newenglishentries = PO4Moz::HelpFile::parse($file, $transcontents); } elsif ($file =~ /\/help\/.*?\.rdf$/) { %newenglishentries = PO4Moz::HelpRDF::parse($file, $englishcontents); %newtransentries = PO4Moz::HelpRDF::parse($file, $transcontents); } push @{$entries{"index"}}, @{$newenglishentries{"index"}}; foreach my $k (keys %newenglishentries) { if ($k ne "index") { $entries{$k} = $newenglishentries{$k}; if (defined $newtransentries{$k}) { $entries{$k}->{"translation"} = $newtransentries{$k}->{"text"}; } } } return %entries; } my $englishdir = $ARGV[0]; my $transdir = $ARGV[1]; if (!$englishdir || !$transdir) { print STDERR "Usage: $0 directoryenglish directorytranslation > outfile.po\n"; exit 1; } my %entries = (); %entries = process_directory($englishdir, $transdir, ".", %entries); print PO4Moz::POfile::generate("", %entries);