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 )