Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Spanglish Translator

by OverlordQ (Hermit)
on Nov 09, 2003 at 11:51 UTC ( [id://305666]=sourcecode: print w/replies, xml ) Need Help??
Category: Fun Stuff
Author/Contact Info Brent Garber
Curtis Hawthorne
Description: A Fun script that was coded when we were taking Spanish Classes. What this script does is translate a selection of text, or an URL into Spanglish, which is a hybrid of English and Spanish.

A Working example can be found here
#!/usr/local/bin/perl -Tw


##Load up the Modules##
use CGI;
use LWP::UserAgent;
use CGI::Carp "fatalsToBrowser";
use URI::URL;

##Get everything started up
use strict;
my $base;
my $cgi = new CGI;
my $ua = new LWP::UserAgent;
my @words = qw(mucho taco grande enchilada burrito salsa);

print $cgi->header();

##Make sure they filled one of the forms out
unless ($cgi->param('text') or $cgi->param('url')) {
        print<<EOT;
<html>
<head>
<title>Spanglish Translator</title>
</head>
<body bgcolor="black" text="white">
<center>
<h1>Spanglish Translator</h1>
</center>

<p>Please type the English text to be translated into Spanglish below.
+<br>
Note: The Spanglish Translator works best with larger ammounts of text
+.
<form action="spanglish.cgi" method="post">
<p><textarea cols="40" rows="10" name="text" wrap="virtual"></textarea
+><br>
<input type="submit" value="Translate">
</form>
<p>Or enter a webpage URL (Pages linked to by the initial page may or 
+may not work, depending on the phase of the moon, the alignment of th
+e planets, and the color of the t-shirt you wore last Thursday...)<br
+>
<form action="spanglish.cgi" method="post">
<input type="text" name="url" value="http://"><br>
<input type="submit" value="Translate">
</form>
<p><center>Original Copyright: <a href="http://www.mrperson.org/">Mr_P
+erson</a><br />Modified by: <a href="http://www.remnetworks.org">OvrL
+rd-Q</a></center></p>
</body>
</html>
EOT


} else {

##Looks like they filled the textarea one out
if($cgi->param('text')) {

    ##Grab the Text and run it through the translator
    my $text = $cgi->param('text');
    my $newtext = &translate($text);

    print<<EOT;
<html>
<head>
<title>Spanglish Translator</title>
</head>
<body bgcolor="black" text="white">
<center>
<h1>Spanglish Translator</h1>
</center>
EOT

    print $newtext;

    print<<EOT;
<p><center>Original Copyright: <a href="http://www.mrperson.org/">Mr_P
+erson</a><br />Modified by: <a href="http://www.remnetworks.org">OvrL
+rd-Q</a></center></p>
</body>
</html>
EOT
} else {

    ##Oh noes, they wanted a webpage!
    ##Start up a HTTP Request
    $ua->agent("Spanglish Translator/0.1 " . $ua->agent);
    my $req = new HTTP::Request GET => $cgi->param('url');
    my $res = $ua->request($req);

    ##Check to see if we got it ok
    if ($res->is_success) {
        my $text = $res->content;

        ##Use the URL requested to form the base for converting from r
+elative to absolute URLS
        $base = $cgi->param('url');

        ##Do the URL Conversions
        $text =~ s#src=\"(.*?)\"#&resolveimg($1)#sige;
        $text =~ s#href\=\"(.*?)\"#&resolvehref($1)#sige;

        ##Shove the resulting page through the translate routine and p
+rint it
        my $newtext = &translate($text);
        print $newtext;

    } else {
        print "Unable to retrieve webpage.\n";
    }
}


}

sub translate {
    my $text = $_[0];
    my $newtext;

    ##Ignore HTML tags, run everything else through the translation en
+gine
    while($text =~ m/(.*?)((?:<.*?>)|(?:&.*?;))/scg) {
        $newtext .= &trans_engine($1);
        $newtext .= $2;
    }

    $text =~ m/(.*)/sg;
    $newtext .= &trans_engine($1);
    return $newtext;
}

sub trans_engine {
    my $text = $_[0];
    my $newtext;

    ##Loop through every word we find

    while($text =~ m/(\W*)(\w*)(\W*)/g) {
        my $notword1 = $1;
        my $word = $2;
        my $notword2 = $3;
        
        ##If it's a short word, just ignore it
        if(length($word) < 3) {
            $newtext .= $notword1 . $word . $notword2;
            next;
        }

        ##one in three chance of getting el or la shoved in front of i
+t
        if(int(rand(3)) == 0) {

            ##Try and Guess the masculine or femenine forms of words
            if($word =~ /(l|o|n|e|r|s)$/i) {
                $word = "el $word";
            } elsif($word =~ /(d|ion|z|a)$/i) {
                $word = "la $word";
            } else {
                if(int(rand(2)) == 0) {
                    $word = "el $word";
                } else {
                    $word = "la $word";
                }
            }
        ##For everything else, just shove an o or an a at the end
        } else {
            if(int(rand(3)) != 0) {
                $word .= "o";
            } else {
                $word .= "a";
            }
        }

        ##Recombine the new word back where it belongs

        $newtext .= $notword1 . $word . $notword2;

        ##one in ten chance of getting one of those magical words appe
+nded to the end

        if(int(rand(10)) == 0) {
            $newtext .= " " . $words[rand(@words)] . " ";
        }
    }

    return $newtext;
}


##Subs to convert urls to absolute

sub resolveimg {
    my $relative = shift;
    my $path = URI::URL->new($relative)->abs( $base, 1 );
    $path = "src=\"$path\"";
    return $path;
}
sub resolvehref {
    my $relative = shift;
    my $path = URI::URL->new($relative)->abs( $base, 1 );
    $path = "href=\"http://thedarkcitadel.com/cgi-bin/spanglish.cgi?ur
+l=$path\"";
    return $path;
}
Replies are listed 'Best First'.
Re: Spanglish Translator
by Anonymous Monk on Jan 29, 2009 at 10:47 UTC
    Hello I couldn't get your translator to work. I need to be able to translate spanglish into english and vise versa english into spanglish. Can you please help. Troy troyvayanos@hotmail.com
      This is not to be confused with the code-switching of Spanish and English, this is a humorous attempt along the lines of Google Sweedish Chef interface language. Bork Bork.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: sourcecode [id://305666]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (5)
As of 2024-03-28 13:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found