読者です 読者をやめる 読者になる 読者になる

日本語を英語、英語を日本語に翻訳する

どんなことに使えるかは謎だけど変換する。
PerlからGoogleAjax Language APIを使って変換する。Ajaxではないけど、Flashやその他環境からもWeb APIが使える。
詳しくはGoogle Translate API — Google DevelopersのFlash and other Non-Javascript Environmentsの章を参照。規約が多いので本格的に使うときは気をつけてください。

use utf8;
use strict;
use Encode;
use JSON::Syck;
use LWP::UserAgent;
use URI::Escape qw(uri_escape_utf8);

binmode(STDOUT, ':encoding(ms932)'); # MS-CMD

TEST:{
   my $referer = 'http://d.hatena.ne.jp/ultraist/';
   print ja2en($referer, "君達の基地は、全てCATSがいただいた。"), "\n";
   print en2ja($referer, "Do you know Haruhi?"), "\n";
}

sub ja2en
{
    my ($referer, $ja) = @_;
    return translate($referer, 'ja', 'en', $ja);
}

sub en2ja
{
    my ($referer, $en) = @_;
    return translate($referer, 'en', 'ja', $en);
}

sub translate
{
    my($referer, $from, $to, $text) = @_;
    my $result = undef;
    my $ua = new LWP::UserAgent();
    my $req = new HTTP::Request(
        GET => sprintf("%s&langpair=%s%7C%s&q=%s",
                  AJAX_LANGUAGE_API_1_0(), $from, $to, uri_escape_utf8($text))
    );
    
    $req->referer($referer);
    my $response = $ua->request($req);
    if ($response->is_success) {
        my $data = JSON::Syck::Load($response->content);
        if ($data->{responseStatus} eq '200') {
            $result = $data->{responseData}->{translatedText};
            Encode::_utf8_on($result);
        }
    }
    
    return $result;
}

sub AJAX_LANGUAGE_API_1_0
{
    'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0';
}
>perl translate.pl
You are our base, all of us CATS.
涼宮はご存じですか?

これはひどい翻訳。でも「yuki」は「結城」と訳したのでセーフ。