#!/usr/bin/perl -w # file KLEIDER/web/src/localization/mttext.pl # maschinelle Übersetzung # 2015-01-24 Herbert Schiemann # GPL Version 2 oder neuer # 2015-07-02 Zeile =machine LANG TRANSLATOR # 2015-11-02 $trans -> translator_name() package main; use utf8 ; use Herbaer::Readargs ; use Herbaer::Translate ; binmode (STDIN, ":utf8") ; binmode (STDOUT, ":utf8") ; binmode (STDERR, ":utf8") ; # Hash der Kommandozeilen-Argumente my $args = { "[cnt]verbose" => 1, "in" => "-", # Eingabedatei (Text) oder - für STDIN "out" => "-", # Ausgabedatei oder - für STDOUT "trname" => "default", # Übersetzer "srclang" => "de", # Default-Quellsprache "tgtlang" => "tc", # Zielsprache }; # gibt die Version nach STDOUT aus sub version { print <<'VERSION' ; mttext.pl v20150124 Maschinelle Übersetzung 2015 Herbert Schiemann VERSION } $args -> {"[sr]version"} = sub { version (); exit 0; }; $args -> {"[sr]help"} = sub { version (); print_message_with_values (<<'HELP', $args); mttext.pl [Optionen] --[no_]verbose Umfang der Meldungen ${[cnt]verbose} --in IN Pfad der Eingabedatei oder "-" für STDIN ${in} --out OUT Pfad der Ausgabedatei oder "-" für STDOUT ${out} --trname TRNAME Übersetzer ${trname} --srclang SRCLANG Default-Quellsprache ${srclang} --tgtlang TGTLANG Zielsprache ${tgtlang} HELP exit 0; }; read_args ($args); run ($args); exit 0; sub run { my $args = shift ; my $verb = $args -> {"[cnt]verbose"}; my $in = $args -> {"in"}; my $dsl = $args -> {"srclang"}; my $tgl = $args -> {"tgtlang"}; print "mttext.pl\n" if $verb; my $trans = new Herbaer::Translate ($args -> {"trname"}) ; if (! $trans) { print STDERR "Kann Übersetzer " . $args -> {"trname"} . " nicht laden\n"; exit 1; } my $hin; if ($in eq "-") { $hin = STDIN; } elsif (! open ($hin, "<:encoding(utf-8)", $in)) { print STDERR "Kann \"$in\" nicht lesen: $!\n"; exit 1; } my $out = $args -> {"out"}; my $hout; if ($out eq "-") { $hout = STDOUT; } elsif (! open ($hout, ">:encoding(utf-8)", $out)) { print STDERR "Kann \"$out\" nicht öffnen: $!\n"; exit 1; } my $text; # zu übersetzender Text my $srclang; # Sprache der Quelle my $mtt; # maschinell übersetzter Text my $line; # Zeile der Eingabe my $l2; # Textzeile ohne führendes "\" my $read = 0; # Text lesen? my $trtext = sub { # Text übersetzen $text =~ s/\s*$//; $text =~ s/\s+/ /g; $mtt = undef ; $mtt ||= $trans -> translate ($text, $srclang, $tgl); if ($mtt) { $mtt =~ s/\s+$// ; $mtt =~ s/\n([=#])/\n\\$1/g ; $mtt =~ s/$([=#])/\\$1/ ; print $hout "=trans $tgl\n$mtt\n"; } $text = ""; }; while (defined ($line = <$hin>)) { if ( $line =~ /^#/ ) { } elsif ( $line =~ /^=/ ) { $read = 0; $trtext -> () if $text; if ( $line =~ /^=segment/ ) { print $hout $line; } elsif ( $line =~ /^=struct/ ) { print $hout $line; } elsif ( $line =~ /^=source\s+(\S*)/ ) { $text = ""; $read = 1; $srclang = $1 || $dsl; } } elsif ( $read ) { $l2 = $line; $l2 =~ s/^\\//; $text .= $l2; } } $trtext -> () if $read && $text; print $hout "=machine $tgl ", ($trans -> translator_name() || $args -> {"trname"}), "\n"; close $hin if $in ne "-"; close $hout if $out ne "-"; $trans -> finish (); } # run # end of file KLEIDER/web/src/localization/mttext.pl