easy_translate 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/easy_translate/translator.rb +46 -35
- data/lib/easy_translate/version.rb +2 -2
- metadata +14 -2
@@ -18,33 +18,7 @@ module EasyTranslate
|
|
18
18
|
json = api_call "#{API_DETECT_PATH}?#{base_params(text, options)}&q=#{URI.escape text}"
|
19
19
|
json['responseData']['language']
|
20
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
|
-
|
21
|
+
|
48
22
|
# Translate batches of string using Google Translate
|
49
23
|
# Optional parameters:
|
50
24
|
# :key - API key for google language (defaults to nil)
|
@@ -56,8 +30,13 @@ module EasyTranslate
|
|
56
30
|
# the text(s) to translate (string/array)
|
57
31
|
# :to - the language(s) to translate to (symbol/string/array)
|
58
32
|
# Returns:
|
59
|
-
# an array of the translated strings
|
60
|
-
def self.
|
33
|
+
# string / an array of the translated strings
|
34
|
+
def self.translate(text, options)
|
35
|
+
# TODO failing because we run options[:to] through get langauge and it strips it to nil
|
36
|
+
|
37
|
+
# what type of call is this?
|
38
|
+
multi_call = options[:to].class == Array || text.class == Array
|
39
|
+
all_multi_call = options[:to].class == Array && text.class == Array
|
61
40
|
# translate params if necessary
|
62
41
|
to_lang = (options[:to].class == Array) ? options[:to].map { |to| get_language(to) } : get_language(options[:to])
|
63
42
|
from_lang = get_language(options[:from])
|
@@ -67,17 +46,23 @@ module EasyTranslate
|
|
67
46
|
# for each to language, put all of the q's
|
68
47
|
to_lang.each do |tol|
|
69
48
|
escaped_lang_pair = URI.escape "#{from_lang}|#{tol}"
|
70
|
-
text.each do |t|
|
49
|
+
text.each do |t|
|
71
50
|
path << "&q=#{URI.escape t}"
|
72
51
|
path << "&langpair=#{escaped_lang_pair}"
|
73
52
|
end
|
74
53
|
end
|
54
|
+
# TODO cleanup
|
75
55
|
# get the proper response and return
|
76
56
|
json = api_call path
|
77
|
-
|
78
|
-
|
57
|
+
# single argument is returned
|
58
|
+
if !multi_call
|
59
|
+
single_single(json)
|
60
|
+
# array should be returned
|
61
|
+
elsif multi_call && !all_multi_call
|
62
|
+
single_multiple(json)
|
63
|
+
# the big badass case
|
79
64
|
else
|
80
|
-
|
65
|
+
multiple_multiple(json, options[:to].count)
|
81
66
|
end
|
82
67
|
end
|
83
68
|
|
@@ -86,6 +71,30 @@ module EasyTranslate
|
|
86
71
|
end
|
87
72
|
|
88
73
|
private
|
74
|
+
|
75
|
+
def self.multiple_multiple(json, translation_count)
|
76
|
+
if json['responseData'].class == Hash
|
77
|
+
[[json['responseData']['translatedText']]]
|
78
|
+
else
|
79
|
+
translations = []
|
80
|
+
responseData = json['responseData'].map { |r| r['responseData']['translatedText'] }
|
81
|
+
per_bucket = responseData.count / translation_count # should always be integer
|
82
|
+
0.upto(translation_count - 1) { |i| translations[i] = responseData.slice(i * per_bucket, per_bucket) }
|
83
|
+
end
|
84
|
+
translations
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.single_multiple(json)
|
88
|
+
if json['responseData'].class == Hash
|
89
|
+
[json['responseData']['translatedText']]
|
90
|
+
else
|
91
|
+
json['responseData'].map { |j| j['responseData']['translatedText'] }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.single_single(json)
|
96
|
+
json['responseData']['translatedText']
|
97
|
+
end
|
89
98
|
|
90
99
|
# take in the base parameters for the google translate api
|
91
100
|
def self.base_params(text, options)
|
@@ -113,7 +122,9 @@ module EasyTranslate
|
|
113
122
|
# can take -- :english, 'english', :en, 'en'
|
114
123
|
def self.get_language(lang)
|
115
124
|
lang = lang.to_s
|
116
|
-
LANGUAGES.include?(lang) ? lang : LANGUAGES.index(lang)
|
125
|
+
lang = LANGUAGES.include?(lang) ? lang : LANGUAGES.index(lang)
|
126
|
+
raise ArgumentError.new('please supply a valid language') unless lang
|
127
|
+
lang
|
117
128
|
end
|
118
129
|
|
119
|
-
end
|
130
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- John Crepezzi
|
@@ -29,6 +29,18 @@ dependencies:
|
|
29
29
|
version: "0"
|
30
30
|
type: :development
|
31
31
|
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: json
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
32
44
|
description: easy_translate is a wrapper for the google translate API that makes sense programatically, and implements API keys
|
33
45
|
email: john@crepezzi.com
|
34
46
|
executables: []
|