diff options
Diffstat (limited to 'www/netsurf/files/buildui.pl')
-rw-r--r-- | www/netsurf/files/buildui.pl | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/www/netsurf/files/buildui.pl b/www/netsurf/files/buildui.pl new file mode 100644 index 000000000000..17aab0711c6b --- /dev/null +++ b/www/netsurf/files/buildui.pl @@ -0,0 +1,82 @@ +#! +# +# Create ui files for each language listed in FatMessages + +my $inputfn = $ARGV[0]; # path to FatMessages +my $templatefn = $ARGV[1]; # path to UI Template +my $output = $ARGV[2]; # output path +my $stub = $ARGV[3]; # filename stub. like options.gtk3.ui will become enoptions.gtk3.ui + +if (length($stub)<3) { + print "invalid stub.\n"; + exit; +} + +my $template; +my %langs = {'en'=>1}; +my %trans; +$trans{'en'}{'foo'}='bar'; + +open(my $fh, '<', $templatefn) or die "cannot open template file $templatefn"; +{ + local $/; + $template = <$fh>; +} +close($fh); + +$template =~ s/translatable="yes"/translatable="no"/g; + +open(my $input, '<', $inputfn) or die "cannot open FatMessages file $inputfn"; + +while (<$input>) +{ + # skip comment and empty lines + /^#/ && next; + /^\s*$/ && next; + + # only parsing things that look like message lines: + if( /^([a-z]{2}).([^.]+).([^:]+):(.*)/ ) + { + my( $lang, $plat, $key, $val ) = ( $1, $2, $3, $4 ); + if ($plat == 'gtk') + { + $val =~ s|<.+?>||g; #remove HTML + $langs{$lang}=1; + $trans{$lang}{$key}=$val; + } + } + +} + +# load up langs hash with copy of the template for each lang + +foreach $key (keys %langs) +{ + if (length($key)==2) + { + $langs{$key} = $template + } +} + +# iterate through each and key replace with translated text + +foreach my $tran (keys %trans) +{ + foreach my $key (keys %{$trans{$tran}}) + { + $langs{$tran} =~ s/\>$key\</\>$trans{$tran}{$key}\</g; + } +} + +# save the ui file for each language + +foreach $key (keys %langs) +{ + if (length($key)==2) + { + open (OFN, '>', $output.'/'.$key.$stub) or die "cannot open output file ".$output.'/'.$key.$stub; + print OFN $langs{$key}; + close (OFN); + } +} + |