#!/usr/bin/perl

# babelfish - simple client to Babelfish language translation services
# Jeffrey S. Haemer, jsh@usenix.org, Oct 99
# adapted by Steve Kinzler, steve@kinzler.com, Apr 09
# https://kinzler.com/me/home.html#other

use strict;
##e WWW::Babelfish;
use Lingua::Translate;	# apparent successor to broken WWW::Babelfish --kinzler
Lingua::Translate::config(src_enc => 'ISO-8859-1', dest_enc => 'ISO-8859-1');
use Getopt::Std;	$Getopt::Std::STANDARD_HELP_VERSION = 1;
my $options = "[-i input_language | -o output_language] [filename ...]";
my $usage = "usage: $0 $options";

sub get_langs	{
   use vars qw($opt_o $opt_i);
   getopts "i:o:" or die $usage;
   die $usage if ($opt_o && $opt_i);
   my $dflt = 'en'; #'English';
   my ($in, $out) = ($opt_i || $dflt, $opt_o || $dflt);
   $in  = 'en' if $in  eq 'English';
   $out = 'en' if $out eq 'English';
   $in  = 'es' if $in  eq 'Spanish';
   $out = 'es' if $out eq 'Spanish';
   ($in, $out);
}

my ($in, $out) = get_langs;
#y $obj = new WWW::Babelfish( 'agent' => 'Mozilla/8.0' );
my $obj = new Lingua::Translate(src => $in, dest => $out);
die "Babelfish server unavailable ($in -> $out)\n" unless defined $obj;

#my @languages = $obj->languages;
#die "source language $in must be in @languages\n"
#   unless grep /$in/, @languages;
#die "destination language $out must be in @languages\n"
#   unless grep /$out/, @languages;

$/ = undef;
#y $translation = $obj->translate(source=>$in, destination=>$out, text=><>);
my $translation = $obj->translate(<>);
$translation =~ s/&quot;/"/gs;

#die "Could not translate: " . $obj->error unless defined $translation;
print $translation, "\n";

=head1 NAME

babelfish - Simple Babelfish client

=head1 SYNOPSIS

babelfish [-i input_langauge | -o output_language] [files]

=head1 DESCRIPTION
=over 2

B<babelfish> uses babelfish to translate from one language to another.
Default language for each is English.

=back

=head1 OPTIONS AND ARGUMENTS

=over 8

=item I<-i>

input language

=item I<-o>

output language

=item I<filename ...>

files to translate (default: stdin)

=back

=head1 ORIGINAL AUTHOR

Jeffrey S. Haemer <jsh@usenix.org>

=head1 SEE ALSO

   perl(1) WWW::Babelfish(3) Lingua::Translate(3)

=cut
