shvets-google_translate 0.5.3 → 0.5.4
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.
- data/Rakefile +21 -1
- data/bin/translate +12 -5
- data/google_translate.gemspec +2 -2
- data/lib/google_translate.rb +153 -0
- metadata +2 -2
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ require 'spec/rake/spectask'
|
|
7
7
|
require 'rake/rdoctask'
|
8
8
|
require 'rcov/rcovtask'
|
9
9
|
|
10
|
-
SPEC = Gem::Specification.load('
|
10
|
+
SPEC = Gem::Specification.load('google_translate.gemspec')
|
11
11
|
|
12
12
|
Rake::GemPackageTask.new(SPEC) do |pkg|
|
13
13
|
pkg.need_tar = true
|
@@ -34,4 +34,24 @@ Rcov::RcovTask.new do |task|
|
|
34
34
|
task.verbose = true
|
35
35
|
end
|
36
36
|
|
37
|
+
desc "test gem compatibility with github"
|
38
|
+
task :"github:validate" do
|
39
|
+
require 'yaml'
|
40
|
+
|
41
|
+
require 'rubygems/specification'
|
42
|
+
data = File.read("google_translate.gemspec")
|
43
|
+
spec = nil
|
44
|
+
|
45
|
+
if data !~ %r{!ruby/object:Gem::Specification}
|
46
|
+
Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
|
47
|
+
else
|
48
|
+
spec = YAML.load(data)
|
49
|
+
end
|
50
|
+
|
51
|
+
spec.validate
|
52
|
+
|
53
|
+
puts spec
|
54
|
+
puts "OK"
|
55
|
+
end
|
56
|
+
|
37
57
|
task :default => :rcov
|
data/bin/translate
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
$:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
|
-
require 'google_translate
|
6
|
+
require 'google_translate'
|
7
7
|
|
8
8
|
class Translate
|
9
9
|
USAGE= <<-TEXT
|
@@ -23,6 +23,15 @@ class Translate
|
|
23
23
|
puts list.join(', ')
|
24
24
|
end
|
25
25
|
|
26
|
+
def display text
|
27
|
+
if RUBY_PLATFORM =~ /mswin32/
|
28
|
+
File.open("temp.txt", "w") {|f| f.write text }
|
29
|
+
%x[notepad temp.txt]
|
30
|
+
else
|
31
|
+
puts text
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
26
35
|
def run
|
27
36
|
if(ARGV.size == 0)
|
28
37
|
puts USAGE and return
|
@@ -44,17 +53,15 @@ class Translate
|
|
44
53
|
from = $1
|
45
54
|
to = $2
|
46
55
|
|
47
|
-
|
48
|
-
|
56
|
+
display(@translator.translate(from.to_sym, to.to_sym, from_text))
|
49
57
|
when /(..)/
|
50
58
|
from_text = ARGV.join(' ')
|
51
59
|
|
52
60
|
from = @translator.detect_language(from_text)['language']
|
53
61
|
to = $1
|
54
62
|
|
55
|
-
|
63
|
+
display(@translator.translate(from.to_sym, to.to_sym, from_text))
|
56
64
|
end
|
57
|
-
|
58
65
|
end
|
59
66
|
end
|
60
67
|
|
data/google_translate.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{google_translate}
|
5
|
-
s.version = "0.5.
|
5
|
+
s.version = "0.5.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = %q{Simple client for Google Translate API.}
|
12
12
|
s.email = %q{alexander.shvets@gmail.com}
|
13
13
|
|
14
|
-
s.files = ["CHANGES", "google_translate.gemspec", "Rakefile", "README", "lib/google_translate.rb
|
14
|
+
s.files = ["CHANGES", "google_translate.gemspec", "Rakefile", "README", "lib/google_translate.rb",
|
15
15
|
"bin/translate", "bin/translate.bat", "spec/spec_helper.rb" , "spec/translate_spec.rb"]
|
16
16
|
|
17
17
|
s.has_rdoc = false
|
@@ -0,0 +1,153 @@
|
|
1
|
+
# google_translate.rb
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
require 'cgi'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module Google
|
8
|
+
class Language
|
9
|
+
attr_reader :name, :code
|
10
|
+
|
11
|
+
def initialize(name, code)
|
12
|
+
@name = name
|
13
|
+
@code = code
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
"(" + @code + ": " + @name + ")"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Translator
|
22
|
+
URL_STRING = "http://ajax.googleapis.com/ajax/services/language/"
|
23
|
+
URL2_STRING = "http://translate.google.com"
|
24
|
+
|
25
|
+
def translate(from, to, from_text, options={})
|
26
|
+
raise Exception.new :missing_from_language if from.nil?
|
27
|
+
raise Exception.new :missing_to_language if to.nil?
|
28
|
+
raise Exception.new :missing_text if from_text.nil?
|
29
|
+
|
30
|
+
request = URL_STRING + "translate?v=1.0&langpair=#{from}%7C#{to}&q=" + CGI.escape(from_text)
|
31
|
+
|
32
|
+
begin
|
33
|
+
response = call_service(request, [:response_status, :response_details, :response_data])
|
34
|
+
|
35
|
+
raise Exception.new :translate_server_is_down if response.empty?
|
36
|
+
|
37
|
+
raise Exception.new response[:response_details] if response[:response_status] != 200 # success
|
38
|
+
|
39
|
+
to_text = response[:response_data]['translatedText']
|
40
|
+
|
41
|
+
# to_text = encode_text(to_text) if to == :ru
|
42
|
+
|
43
|
+
(options[:html]) ? CGI.unescapeHTML(to_text) : to_text
|
44
|
+
rescue OpenURI::HTTPError
|
45
|
+
raise Exception.new :translate_server_is_down
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def detect_language test_text
|
50
|
+
raise Exception.new :missing_test_text if test_text.nil?
|
51
|
+
|
52
|
+
request = URL_STRING + "detect?v=1.0&q=" + CGI.escape(test_text)
|
53
|
+
|
54
|
+
begin
|
55
|
+
response = call_service(request, [:response_data])
|
56
|
+
response_data = response[:response_data]
|
57
|
+
|
58
|
+
raise Exception.new :translate_server_is_down if response.empty?
|
59
|
+
#raise Exception.new :unreliable_detection if !response_data['isReliable']
|
60
|
+
|
61
|
+
response_data
|
62
|
+
#
|
63
|
+
rescue OpenURI::HTTPError
|
64
|
+
raise Exception.new :translate_server_is_down
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def supported_languages
|
69
|
+
call_service2(URL2_STRING , [])
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def camelize(str)
|
75
|
+
words = str.split('_')
|
76
|
+
|
77
|
+
words[0] + words[1..-1].map {|w| w.capitalize}.join
|
78
|
+
end
|
79
|
+
|
80
|
+
def call_service(request, keys)
|
81
|
+
response = {}
|
82
|
+
|
83
|
+
open(request) do |stream|
|
84
|
+
content = stream.read
|
85
|
+
|
86
|
+
unless content.nil?
|
87
|
+
json = JSON.parse(content)
|
88
|
+
|
89
|
+
keys.each do |key|
|
90
|
+
response[key] = json[camelize(key.to_s)]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
response
|
96
|
+
end
|
97
|
+
|
98
|
+
def call_service2(request, keys)
|
99
|
+
response = {}
|
100
|
+
|
101
|
+
open(URI.escape(request)) do |stream|
|
102
|
+
content = stream.read
|
103
|
+
|
104
|
+
from_languages = collect_languages content, 'sl', 'old_sl'
|
105
|
+
to_languages = collect_languages content, 'tl', 'old_tl'
|
106
|
+
|
107
|
+
response[:from_languages] = from_languages
|
108
|
+
response[:to_languages] = to_languages
|
109
|
+
end
|
110
|
+
|
111
|
+
response
|
112
|
+
end
|
113
|
+
|
114
|
+
def collect_languages buffer, tag_name, tag_id
|
115
|
+
languages = []
|
116
|
+
|
117
|
+
spaces = '\s?'
|
118
|
+
quote = '(\s|\'|")?'
|
119
|
+
text = '(.*)'
|
120
|
+
|
121
|
+
re1 = /<select#{spaces}name=#{quote}#{tag_name}#{quote}#{spaces}id=#{quote}#{tag_id}#{quote}#{spaces}tabindex=0>(.*)<\/select>/
|
122
|
+
text = re1.match(buffer)[5]
|
123
|
+
|
124
|
+
re2 = /<option(\s*)value="([a-z|A-Z]*)">([a-z|A-Z]*)<\/option>/
|
125
|
+
|
126
|
+
matches = text.scan(re2)
|
127
|
+
|
128
|
+
matches.each do |m|
|
129
|
+
languages << Language.new(m[2], m[1])
|
130
|
+
end
|
131
|
+
|
132
|
+
languages
|
133
|
+
end
|
134
|
+
|
135
|
+
def encode_text text
|
136
|
+
s = ''
|
137
|
+
text.unpack("U*").each do |ch|
|
138
|
+
if (1072..1087).include? ch
|
139
|
+
s << (ch-912).chr
|
140
|
+
elsif (1088..1103).include? ch
|
141
|
+
s << (ch-864).chr
|
142
|
+
elsif (1020..1071).include? ch
|
143
|
+
s << (ch-892).chr
|
144
|
+
else
|
145
|
+
s << ch
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
s
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shvets-google_translate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Shvets
|
@@ -26,7 +26,7 @@ files:
|
|
26
26
|
- google_translate.gemspec
|
27
27
|
- Rakefile
|
28
28
|
- README
|
29
|
-
-
|
29
|
+
- lib/google_translate.rb
|
30
30
|
- bin/translate
|
31
31
|
- bin/translate.bat
|
32
32
|
- spec/spec_helper.rb
|