easy_translate 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,45 @@
1
+ module EasyTranslate
2
+
3
+ require 'easy_translate/translator'
4
+
5
+ require 'uri'
6
+ require 'net/http'
7
+
8
+ require 'rubygems'
9
+ require 'json'
10
+
11
+ API_URL = 'ajax.googleapis.com'
12
+ API_TRANSLATE_PATH = '/ajax/services/language/translate'
13
+ API_DETECT_PATH = '/ajax/services/language/detect'
14
+ API_VERSION = '1.0'
15
+
16
+ LANGUAGES = { 'tr' => 'turkish', 'sv' => 'swedish', 'km' => 'khmer',
17
+ 'mk' => 'macedonian', 'chr' => 'cherokee', 'si' => 'sinhalese',
18
+ 'zh-cn' => 'chinese_simplified', 'fi' => 'finnish', 'lo' => 'laothian',
19
+ 'da' => 'danish', 'th' => 'thai', 'sk' => 'slovak', 'sq' => 'albanian',
20
+ 'ms' => 'malay', 'no' => 'norwegian', '' => 'unknown', 'cy' => 'welsh',
21
+ 'be' => 'belarusian', 'am' => 'amharic', 'ca' => 'catalan',
22
+ 'zh' => 'chinese', 'id' => 'indonesian', 'ta' => 'tamil',
23
+ 'fa' => 'persian', 'zh-tw' => 'chinese_traditional', 'uz' => 'uzbek',
24
+ 'sw' => 'swahili', 'ja' => 'japanese', 'kk' => 'kazakh',
25
+ 'gl' => 'galician', 'ps' => 'pashto', 'lv' => 'latvian', 'te' => 'telugu',
26
+ 'sa' => 'sanskrit', 'kn' => 'kannada', 'af' => 'afrikaans',
27
+ 'ka' => 'georgian', 'it' => 'italian', 'mr' => 'marathi', 'ug' => 'uighur',
28
+ 'ro' => 'romanian', 'nl' => 'dutch', 'gu' => 'gujarati',
29
+ 'eo' => 'esperanto', 'uk' => 'ukrainian', 'ru' => 'russian',
30
+ 'ky' => 'kyrgyz', 'ga' => 'irish', 'tl' => 'tagalog', 'sr' => 'serbian',
31
+ 'pa' => 'punjabi', 'mt' => 'maltese', 'ne' => 'nepali', 'or' => 'oriya',
32
+ 'eu' => 'basque', 'dv' => 'dhivehi', 'sl' => 'slovenian',
33
+ 'pl' => 'polish', 'el' => 'greek', 'ku' => 'kurdish', 'de' => 'german',
34
+ 'iw' => 'hebrew', 'sd' => 'sindhi', 'et' => 'estonian', 'gn' => 'guarani',
35
+ 'is' => 'icelandic', 'bn' => 'bengali', 'tl' => 'filipino',
36
+ 'bo' => 'tibetan', 'es' => 'spanish', 'fr' => 'french',
37
+ 'hy' => 'armenian', 'bg' => 'bulgarian', 'lt' => 'lithuanian',
38
+ 'mn' => 'mongolian', 'az' => 'azerbaijani', 'yi' => 'yiddish',
39
+ 'ur' => 'urdu', 'en' => 'english', 'pt-pt' => 'portuguese',
40
+ 'vi' => 'vietnamese', 'ml' => 'malayalam', 'ar' => 'arabic',
41
+ 'bh' => 'bihari', 'iu' => 'inuktitut', 'my' => 'burmese',
42
+ 'hu' => 'hungarian', 'ko' => 'korean', 'tg' => 'tajik', 'cs' => 'czech',
43
+ 'hi' => 'hindi', 'hr' => 'croatian' }
44
+
45
+ end
@@ -0,0 +1,119 @@
1
+ module EasyTranslate
2
+
3
+ attr_writer :api_key
4
+
5
+ # Detect the language of a given string of text.
6
+ # Optional parameters:
7
+ # :key - API key for google language (defaults to nil)
8
+ # :host_language - language (defaults to 'en')
9
+ # :user_ip - the ip of the end user - will help not be mistaken for abuse
10
+ # Required Parameters:
11
+ # the text to detect the language for
12
+ # Returns:
13
+ # the string language code (ie: 'en') of the language
14
+ # Note:
15
+ # This API (since it focuses more on tranlations/ease, does not return
16
+ # confidence ratings)
17
+ def self.detect(text, options = {})
18
+ json = api_call "#{API_DETECT_PATH}?#{base_params(text, options)}&q=#{URI.escape text}"
19
+ json['responseData']['language']
20
+ end
21
+
22
+ # Translate a string using Google Translate
23
+ # Optional parameters:
24
+ # :key - API key for google language (defaults to nil)
25
+ # :host_language - language (defaults to 'en') (symbol/string)
26
+ # :user_ip - the ip of the end user - will help not be mistaken for abuse
27
+ # :from - the language to translate from (symbol/string)
28
+ # :html - boolean indicating whether the text you're translating is HTML or plaintext
29
+ # Required Parameters:
30
+ # the text to translate
31
+ # :to - the language to translate to (symbol/string)
32
+ # Returns:
33
+ # the translated string
34
+ def self.translate(text, options)
35
+ # translate params if necessary
36
+ to_lang = get_language(options[:to])
37
+ from_lang = get_language(options[:from])
38
+ # make the call
39
+ path = "#{API_TRANSLATE_PATH}?#{base_params(text, options)}"
40
+ path << '&format=' << (options[:html] ? 'html' : 'text')
41
+ path << '&q=' << URI.escape(text)
42
+ path << '&langpair=' << URI.escape("#{from_lang}|#{to_lang}")
43
+ # get the proper response and return
44
+ json = api_call path
45
+ json['responseData']['translatedText']
46
+ end
47
+
48
+ # Translate batches of string using Google Translate
49
+ # Optional parameters:
50
+ # :key - API key for google language (defaults to nil)
51
+ # :host_language - language (defaults to 'en') (symbol/string)
52
+ # :user_ip - the ip of the end user - will help not be mistaken for abuse
53
+ # :from - the language to translate from (symbol/string)
54
+ # :html - boolean indicating whether the text you're translating is HTML or plaintext
55
+ # Required Parameters:
56
+ # the text(s) to translate (string/array)
57
+ # :to - the language(s) to translate to (symbol/string/array)
58
+ # Returns:
59
+ # an array of the translated strings
60
+ def self.translate_batch(text, options)
61
+ # translate params if necessary
62
+ to_lang = (options[:to].class == Array) ? options[:to].map { |to| get_language(to) } : get_language(options[:to])
63
+ from_lang = get_language(options[:from])
64
+ # make the call
65
+ path = "#{API_TRANSLATE_PATH}?#{base_params(text, options)}"
66
+ path << '&format=' << (options[:html] ? 'html' : 'text')
67
+ # for each to language, put all of the q's
68
+ to_lang.each do |tol|
69
+ escaped_lang_pair = URI.escape "#{from_lang}|#{tol}"
70
+ text.each do |t|
71
+ path << "&q=#{URI.escape t}"
72
+ path << "&langpair=#{escaped_lang_pair}"
73
+ end
74
+ end
75
+ # get the proper response and return
76
+ json = api_call path
77
+ if json['responseData'].class == Array
78
+ translations = json['responseData'].map { |j| j['responseData']['translatedText'] }
79
+ else
80
+ [json['responseData']['translatedText']]
81
+ end
82
+ end
83
+
84
+ # an exception indicating something went wrong in EasyTranslate
85
+ class EasyTranslateException < Exception
86
+ end
87
+
88
+ private
89
+
90
+ # take in the base parameters for the google translate api
91
+ def self.base_params(text, options)
92
+ raise ArgumentError.new('multiple :from not allowed') if options[:from] && options[:from].class == Array
93
+ raise ArgumentError.new('no string given') if text.empty?
94
+ key = options[:key] || @api_key || nil
95
+ params = "v=#{API_VERSION}"
96
+ params << '&userip=' << options[:user_ip] if options.has_key?(:user_ip)
97
+ params << '&hl=' << get_language(options[:host_language]) if options.has_key?(:host_language)
98
+ params << '&key=' << key if key
99
+ # key is standard - but left to individual methods
100
+ params
101
+ end
102
+
103
+ # make a call to the api and throw an error on non-200 response
104
+ # TODO - expand error handling
105
+ def self.api_call(path)
106
+ response = Net::HTTP.get(API_URL, path)
107
+ json = JSON.parse(response)
108
+ raise EasyTranslateException.new(json['responseDetails']) unless json['responseStatus'] == 200
109
+ json
110
+ end
111
+
112
+ # a function used to get the lang code of any input.
113
+ # can take -- :english, 'english', :en, 'en'
114
+ def self.get_language(lang)
115
+ lang = lang.to_s
116
+ LANGUAGES.include?(lang) ? lang : LANGUAGES.index(lang)
117
+ end
118
+
119
+ end
@@ -0,0 +1,5 @@
1
+ module EasyTranslate
2
+
3
+ VERSION = "0.0.1"
4
+
5
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easy_translate
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - John Crepezzi
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-28 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
+ description: easy_translate is a wrapper for the google translate API that makes sense programatically, and implements API keys
33
+ email: john@crepezzi.com
34
+ executables: []
35
+
36
+ extensions: []
37
+
38
+ extra_rdoc_files: []
39
+
40
+ files:
41
+ - lib/easy_translate/translator.rb
42
+ - lib/easy_translate/version.rb
43
+ - lib/easy_translate.rb
44
+ has_rdoc: true
45
+ homepage: http://github.com/seejohnrun/easy_translate/
46
+ licenses: []
47
+
48
+ post_install_message:
49
+ rdoc_options: []
50
+
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ segments:
65
+ - 0
66
+ version: "0"
67
+ requirements: []
68
+
69
+ rubyforge_project: easy-translate
70
+ rubygems_version: 1.3.6
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: Google Translate API Wrapper for Ruby
74
+ test_files: []
75
+