Acme-eng2kor

 view release on metacpan or  search on metacpan

META.yml  view on Meta::CPAN

  Const::Fast: 0
  Encode: 0
  Getopt::Long: 0
  HTTP::Request: 0
  HTTP::Response: 0
  JSON: 0
  LWP::UserAgent: 0
  Pod::Usage: 0
  URI::Escape: 0
  namespace::autoclean: 0
  utf8: 0
version: v0.0.2

Makefile.PL  view on Meta::CPAN

    'Const::Fast' => '0',
    'Encode' => '0',
    'Getopt::Long' => '0',
    'HTTP::Request' => '0',
    'HTTP::Response' => '0',
    'JSON' => '0',
    'LWP::UserAgent' => '0',
    'Pod::Usage' => '0',
    'URI::Escape' => '0',
    'namespace::autoclean' => '0',
    'utf8' => '0'
  },
  'VERSION' => 'v0.0.2',
  'test' => {
    'TESTS' => 't/*.t'
  }
);


unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
  my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};

bin/eng2kor  view on Meta::CPAN

#!/usr/bin/env perl
package eng2kor;
# ABSTRACT: App::eng2kor CLI


use strict;
use warnings;
use utf8;
use Encode qw/encode decode/;
use Pod::Usage;
use Getopt::Long;
use Acme::eng2kor;

if ( $^O =~ m/MSWin32/i ) { # for Windows
    binmode STDIN,  ':encoding(euc-kr)';
    binmode STDOUT, ':encoding(euc-kr)';
    @ARGV = map { decode( 'euc-kr', $_ ) } @ARGV;
} else {
    binmode STDIN,  ':encoding(UTF-8)';
    binmode STDOUT, ':encoding(UTF-8)';
    @ARGV = map { decode( 'utf8', $_ ) } @ARGV;
}

my %options;
GetOptions( \%options, "--src=s", "--dst=s", "--reverse", "--help", "--list" );
pod2usage( 0, -noperldoc => 1 ) if $options{help};
my $src = $options{src} || $ENV{E2K_SRC} || 'en';
my $dst = $options{dst} || $ENV{E2K_DST} || 'ko';
($src, $dst) = ($dst, $src) if $options{reverse};
die "src - ENV{E2K_SRC}: $src\ndst - ENV{E2K_DST}: $dst\n" if $options{list};
my $app = Acme::eng2kor->new(src => $src, dst => $dst);

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'

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

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 );

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

=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

t/01app.t  view on Meta::CPAN

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Acme::eng2kor;
use Test::More tests => 7;
my $app;
ok( $app = Acme::eng2kor->new, 'create new instance');
is( $app->src, 'en', 'src default');
is( $app->dst, 'ko', 'dst default');
$app->text('hello');
is( $app->text, 'hello', 'set text correct');
$app->src('ko');
$app->dst('en');



( run in 1.338 second using v1.01-cache-2.11-cpan-49f99fa48dc )