#!/usr/bin/perl use strict; my $start_dir = "MT-4.0-beta5-20070703"; my $exist_file = "ru_1.pm"; my %old_phrases; my @phrases; open (MEM, $exist_file); while () { if ( /'(.+)(?\s+'(.+)(?ru.pm"); print RES "package MT::L10N::ru; #Russian\n"; print RES "use strict;\n"; print RES "use MT::L10N;\n"; print RES "use MT::L10N::en_us;\n"; print RES "use vars qw( \@ISA \%Lexicon );\n"; print RES "\@ISA = qw( MT::L10N::en_us );\n\n\n"; print RES "\%Lexicon = (\n"; my %t = process_directory($start_dir); foreach my $file ( keys %t ) { my $tf = $file; $tf =~ s/$start_dir//; $tf =~ s/^\///; print RES "\n\n# ".$tf."\n"; foreach my $ph ( @{$t{$file}} ) { $ph =~ s/'/\\'/g; if ( check_phrase_unique(\@phrases, $ph) ) { my $t_ph = $ph; if ( exists $old_phrases{$ph} ) { $t_ph = $old_phrases{$ph}; } print RES " '".$ph."' => '".$t_ph."',\n"; push (@phrases, $ph); } else { print "not unique\n"; } } } print RES ");\n\n1;\n"; close (RES); sub check_phrase_unique { my ( $phrases, $phrase ) = @_; foreach my $ph ( @$phrases ) { if ( $ph eq $phrase ) { return 0; } } return 1; } sub process_directory { my ( $st_dir ) = @_; my %res; my @dirs; opendir (DIR, $st_dir); foreach my $dir ( readdir(DIR) ) { if ( $dir eq "." || $dir eq ".." ) { next }; push(@dirs, $dir); } closedir (DIR); foreach my $dir ( @dirs ) { if ( -d $st_dir."/".$dir ) { my %t = process_directory($st_dir."/".$dir); foreach my $file ( keys %t ) { $res{$file} = $t{$file}; } } elsif ( -f $st_dir."/".$dir ) { my @t = process_file($st_dir."/".$dir); if ( @t ) { @{$res{$st_dir."/".$dir}} = @t; } } } return %res; } sub process_file { my ( $file ) = @_; my $cont; my @res; open (MEM, $file); while () { $cont .= $_; } close (MEM); while ( $cont =~ /<__trans\s+phrase="(.+?)(?translate\(\s*"(.+?)(?