#!/usr/bin/perl -w # file KLEIDER/web/src/localization/translate.pl # Modul Herbaer::Translate (interaktiv) testen # 2015-11-14 Herbert Schiemann # GPL Version 2 oder neuer 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 = { "in" => "-", # Eingabedatei (Text) oder - für STDIN "out" => "-", # Ausgabedatei oder - für STDOUT "trname" => "default", # Übersetzer "srclang" => "de", # Default-Quellsprache "tgtlang" => "zh", # Zielsprache }; # gibt die Version nach STDOUT aus sub version { print <<'VERSION' ; translate.pl v20151114 Interaktiver Test der Übersetzung 2015 Herbert Schiemann VERSION } $args -> {"[sr]version"} = sub { version (); exit 0; }; $args -> {"[sr]help"} = sub { version (); print_message_with_values (<<'HELP', $args); translate.pl [Optionen] --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 Quellsprache ${srclang} --tgtlang Zielsprache ${tgtlang} Befehle: TRANSLATOR TRANSLATOR_NAME SRCLANG (?) TGTLANG (?) TRANSLATE FINISH HELP | ? EXIT HELP exit 0; }; read_args ($args); my $trans = new Herbaer::Translate ($args -> {"trname"}) ; if (! $trans) { print STDERR "Kann Übersetzer " . $args -> {"trname"} . " nicht laden\n"; } my $in = $args -> {"in"}; 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 $t; my $n; my $line; while ( defined ($line = <$hin>) ) { $line =~ s/^\s+// ; $line =~ s/\s+$// ; next unless $line; next if $line =~ /^#/ ; if ( $line =~ /^TRANSLATOR\s+(.+)$/ ) { $t = $1; if ( $args -> {"trname"} ne $t ) { $n = new Herbaer::Translate ($t) ; if ($n) { $args -> {"trname"} = $t; $trans = $n; print $hout "Neuer Übersetzer: ", $trans -> translator_name (), "\n"; } else { print $hout "Kann Übersetzer \"$t\" nicht laden.\n"; } $n = undef; } } elsif ( $line =~ /^TRANSLATOR_NAME$/ ) { if ($trans) { print $hout "translator_name: ", $trans -> translator_name (), "\n"; } else { print $hout "ERROR: no translator\n"; } } elsif ( $line =~ /^SRCLANG\s+(\S+)/) { $t = $1; if ($args -> {"srclang"} ne $t ) { $args -> {"srclang"} = $t; print $hout "SRCLANG $t\n"; } else { print $hout "SRCLANG $t OK\n"; } } elsif ( $line eq "SRCLANG" ) { print $hout "SRCLANG ", $args -> {"srclang"}, "\n"; } elsif ( $line =~ /^TGTLANG\s+(\S+)/) { $t = $1; if ($args -> {"tgtlang"} ne $t ) { $args -> {"tgtlang"} = $t; print $hout "TGTLANG $t\n"; } else { print $hout "TGTLANG $t OK\n"; } } elsif ( $line eq "TGTLANG" ) { print $hout "TGTLANG ", $args -> {"tgtlang"}, "\n"; } elsif ( $line =~ /^TRANSLATE\s+(.+)/) { $t = $1; if ($trans) { $n = $trans -> translate ($t, $args -> {"srclang"}, $args -> {"tgtlang"}); print $hout "TRANSLATION ", $n, "\n"; $n = undef; } else { print $hout "ERROR: no translator\n"; } } elsif ( $line eq "FINISH" ) { if ($trans) { $trans -> finish (); print $hout "OK\n"; } } elsif ( $line eq "HELP" or $line eq "?" ) { print <<'HLP'; Befehle: TRANSLATOR TRANSLATOR_NAME SRCLANG (?) TGTLANG (?) TRANSLATE FINISH HELP | ? EXIT HLP } elsif ( $line eq "EXIT" ) { last; } else { if ($trans) { $n = $trans -> translate ($line, $args -> {"srclang"}, $args -> {"tgtlang"}); print $hout "TRANSLATION ", $n || "", "\n"; $n = undef; } else { print $hout "ERROR: no translator\n"; } } } # end of file KLEIDER/web/src/localization/translate.pl