Acme-eng2kor

 view release on metacpan or  search on metacpan

lib/Acme/eng2kor.pm  view on Meta::CPAN

package Acme::eng2kor;
# ABSTRACT: English to Korean Translator


use utf8;
use Any::Moose;
use Any::Moose '::Util::TypeConstraints';
use JSON qw/decode_json/;
use Const::Fast;
use URI::Escape qw/uri_escape_utf8/;
use HTTP::Request;
use HTTP::Response;
use LWP::UserAgent;
use namespace::autoclean;

const my $GOOGLE_TRANSLATE_API_URL => "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s";
const my @SUPPORT_LANG_TAGS => qw/ach af ak am ar az be bem bg bh bn br bs ca co cs cy da de el en eo es et eu fa fi fo fr fy ga gd gl gn gu ha haw hi hr ht hu hy ia id ig is it iw ja jw ka kg kk km kn ko ku ky la lg ln lo lt lua lv mfe mg mi mk ml m...

subtype 'LangTags'
    => as 'Str'
    => where { my $lang = $_; grep { /^$lang$/ } @SUPPORT_LANG_TAGS; };

has 'src' => (
    is => 'rw',
    isa => 'LangTags',
    default => 'en'
);

has 'dst' => (
    is => 'rw',
    isa => 'LangTags',
    default => 'ko'
);

has 'text' => (
    is => 'rw',
    isa => 'Str'
);

has 'translated' => (
    is => 'rw',
    isa => 'Str'
);


sub translate {
    my ($self, $word) = @_;
    map { s/^\s+//; s/\s+$// } $word if defined $word;
    return $self->_google_translate($word);
}


sub _google_translate {
    my ($self, $word) = @_;
    $self->text($word) if defined $word;
    my $text = uri_escape_utf8($self->text);
    my $escaped_uri = sprintf($GOOGLE_TRANSLATE_API_URL, $text, $self->src . '|' . $self->dst);
    my $json = $self->get_json($escaped_uri);
    $self->translated($json->{responseData}{translatedText});
    return $json;
}


sub get_json {
    my ($self, $url) = @_;
    my $req = HTTP::Request->new( GET => $url );
    my $ua  = LWP::UserAgent->new;
    my $res = $ua->request($req);
    die $res->status_line, "\n" unless $res->is_success;
    return decode_json($res->content);
}

__PACKAGE__->meta->make_immutable;


1;

__END__
=pod

=encoding utf-8

=head1 NAME

Acme::eng2kor - English to Korean Translator

=head1 VERSION

version v0.0.2

=head1 SYNOPSIS

    use utf8;
    use Acme::eng2kor;
    binmode STDOUT, ':encoding(UTF-8)';
    my $app = Acme::eng2kor->new;
    $app->translate('hello');
    print $app->text, "\n";         # hello
    print $app->translated, "\n";   # 안녕하세요

=head1 DESCRIPTION

Yet Another Translator

=head1 METHODS

=head2 translate

Internal interface

=head2 _google_translate

Used google translate api

=head2 get_json

Return decoded json text after HTTP IO.

=head1 SUPPORT LANGUAGES

Google translate available language list is below.

    ach: Luo
    af: Afrikaans
    ak: Akan
    am: Amharic
    ar: Arabic
    az: Azerbaijani
    be: Belarusian
    bem: Bemba
    bg: Bulgarian
    bh: Bihari
    bn: Bengali
    br: Breton
    bs: Bosnian
    ca: Catalan
    co: Corsican
    cs: Czech
    cy: Welsh
    da: Danish
    de: German
    el: Greek
    en: English
    eo: Esperanto
    es: Spanish
    et: Estonian
    eu: Basque
    fa: Persian
    fi: Finnish
    fo: Faroese
    fr: French
    fy: Frisian
    ga: Irish



( run in 1.588 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )