google-translate 0.8.5 → 0.8.6
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/.gitignore +5 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/dictionaries/oshvets.xml +3 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/google-translate.iml +78 -0
- data/.idea/misc.xml +14 -0
- data/.idea/modules.xml +9 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +8 -0
- data/.idea/workspace.xml +974 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGES +5 -1
- data/Gemfile +21 -0
- data/Gemfile.lock +35 -0
- data/Rakefile +22 -89
- data/bin/translate +13 -17
- data/google-translate.gemspec +16 -61
- data/google-translate.gemspec.erb +22 -0
- data/lib/google_translate.rb +2 -132
- data/lib/google_translate/google_translate.rb +108 -0
- data/lib/google_translate/language.rb +13 -0
- data/lib/google_translate/version.rb +3 -0
- data/spec/google_translate.rb +39 -0
- data/spec/spec_helper.rb +1 -0
- data/test.html +647 -0
- metadata +49 -144
- data/VERSION +0 -1
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
google-translate
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-1.9.3
|
data/CHANGES
CHANGED
@@ -43,4 +43,8 @@
|
|
43
43
|
|
44
44
|
== Version 0.8.5
|
45
45
|
|
46
|
-
* Stop using translate API, start using scraping google translate
|
46
|
+
* Stop using translate API, start using scraping google translate
|
47
|
+
|
48
|
+
== Version 0.8.6
|
49
|
+
|
50
|
+
* Fix auto detect source language; fix countries list; refactoring code
|
data/Gemfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
group :default do
|
4
|
+
gem "json_pure"
|
5
|
+
end
|
6
|
+
|
7
|
+
group :development do
|
8
|
+
gem "gemspec_deps_gen"
|
9
|
+
gem "gemcutter"
|
10
|
+
end
|
11
|
+
|
12
|
+
group :test do
|
13
|
+
gem "rspec"
|
14
|
+
end
|
15
|
+
|
16
|
+
group :debug do
|
17
|
+
gem "ruby-debug-base19x", "0.11.30.pre12"
|
18
|
+
gem "ruby-debug-ide", "0.4.17"
|
19
|
+
end
|
20
|
+
|
21
|
+
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
debugger-ruby_core_source (1.2.3)
|
5
|
+
diff-lcs (1.1.3)
|
6
|
+
file_utils (1.0.6)
|
7
|
+
gemcutter (0.7.1)
|
8
|
+
gemspec_deps_gen (1.0.5)
|
9
|
+
file_utils
|
10
|
+
json_pure (1.6.5)
|
11
|
+
rake (10.1.0)
|
12
|
+
rspec (2.8.0)
|
13
|
+
rspec-core (~> 2.8.0)
|
14
|
+
rspec-expectations (~> 2.8.0)
|
15
|
+
rspec-mocks (~> 2.8.0)
|
16
|
+
rspec-core (2.8.0)
|
17
|
+
rspec-expectations (2.8.0)
|
18
|
+
diff-lcs (~> 1.1.2)
|
19
|
+
rspec-mocks (2.8.0)
|
20
|
+
ruby-debug-base19x (0.11.30.pre12)
|
21
|
+
debugger-ruby_core_source (>= 1.1.4)
|
22
|
+
rake (>= 0.8.1)
|
23
|
+
ruby-debug-ide (0.4.17)
|
24
|
+
rake (>= 0.8.1)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
gemcutter
|
31
|
+
gemspec_deps_gen
|
32
|
+
json_pure
|
33
|
+
rspec
|
34
|
+
ruby-debug-base19x (= 0.11.30.pre12)
|
35
|
+
ruby-debug-ide (= 0.4.17)
|
data/Rakefile
CHANGED
@@ -1,104 +1,37 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env rake
|
2
2
|
|
3
|
-
|
3
|
+
$LOAD_PATH.unshift File.expand_path("lib", File.dirname(__FILE__))
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
5
|
+
require "rspec/core/rake_task"
|
6
|
+
require "google_translate/version"
|
7
|
+
require "gemspec_deps_gen/gemspec_deps_gen"
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
begin
|
11
|
-
require 'bundler'
|
12
|
-
|
13
|
-
begin
|
14
|
-
require 'jeweler'
|
15
|
-
|
16
|
-
Jeweler::Tasks.new do |gemspec|
|
17
|
-
gemspec.name = "google-translate"
|
18
|
-
gemspec.summary = "Simple client for Google Translate API (Summary)."
|
19
|
-
gemspec.description = "Simple client for Google Translate API."
|
20
|
-
gemspec.email = "alexander.shvets@gmail.com"
|
21
|
-
gemspec.homepage = "http://github.com/shvets/google-translate"
|
22
|
-
gemspec.authors = ["Alexander Shvets"]
|
23
|
-
gemspec.files = FileList["CHANGES", "google-translate.gemspec", "Rakefile", "README", "VERSION",
|
24
|
-
"lib/**/*", "bin/**/*"]
|
25
|
-
gemspec.add_dependency "json_pure", ">= 1.1.4"
|
26
|
-
|
27
|
-
gemspec.executables = ['translate', 't']
|
28
|
-
gemspec.requirements = ["none"]
|
29
|
-
gemspec.bindir = "bin"
|
30
|
-
|
31
|
-
gemspec.add_bundler_dependencies
|
32
|
-
end
|
33
|
-
rescue LoadError
|
34
|
-
puts "Jeweler not available. Install it s with: [sudo] gem install jeweler"
|
35
|
-
end
|
36
|
-
rescue LoadError
|
37
|
-
puts "Bundler not available. Install it s with: [sudo] gem install bundler"
|
9
|
+
def version
|
10
|
+
GoogleTranslate::VERSION
|
38
11
|
end
|
39
12
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
rake gemspec
|
44
|
-
rake build
|
45
|
-
rake install
|
46
|
-
git add .
|
47
|
-
)
|
48
|
-
puts "Commit message:"
|
49
|
-
message = STDIN.gets
|
13
|
+
def project_name
|
14
|
+
File.basename(Dir.pwd)
|
15
|
+
end
|
50
16
|
|
51
|
-
|
17
|
+
task :build do
|
18
|
+
system "rm #{project_name}.gemspec"
|
19
|
+
generator = GemspecDepsGen.new
|
52
20
|
|
53
|
-
|
54
|
-
git commit -m "#{message}"
|
55
|
-
|
56
|
-
git push origin master
|
21
|
+
generator.generate_dependencies "#{project_name}.gemspec.erb", "#{project_name}.gemspec"
|
57
22
|
|
58
|
-
|
59
|
-
)
|
23
|
+
system "gem build #{project_name}.gemspec"
|
60
24
|
end
|
61
25
|
|
62
|
-
|
63
|
-
|
64
|
-
command = "bin/translate " + (ENV['params'].nil? ? '' : ENV['params'])
|
65
|
-
puts ruby("#{command}")
|
26
|
+
task :install do
|
27
|
+
system "gem install #{project_name}-#{version}.gem"
|
66
28
|
end
|
67
29
|
|
68
|
-
|
69
|
-
|
70
|
-
# task.pattern = 'spec/**/*_spec.rb'
|
71
|
-
# task.verbose = false
|
72
|
-
#end
|
73
|
-
|
74
|
-
if defined? RSpec::Core::RakeTask
|
75
|
-
require 'rspec/core/rake_task'
|
76
|
-
|
77
|
-
RSpec::Core::RakeTask.new do |task|
|
78
|
-
task.pattern = 'spec/**/*_spec.rb'
|
79
|
-
task.verbose = false
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
if defined? Rake::RDocTask
|
84
|
-
require 'rake/rdoctask'
|
85
|
-
|
86
|
-
Rake::RDocTask.new do |rdoc|
|
87
|
-
rdoc.rdoc_dir = 'rdoc'
|
88
|
-
rdoc.title = 'teststuff'
|
89
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
90
|
-
rdoc.rdoc_files.include('README*')
|
91
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
92
|
-
end
|
30
|
+
task :release => :build do
|
31
|
+
system "gem push #{project_name}-#{version}.gem"
|
93
32
|
end
|
94
33
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
Rcov::RcovTask.new do |task|
|
99
|
-
task.libs << 'test'
|
100
|
-
task.test_files = FileList['test/**/*_test.rb']
|
101
|
-
task.verbose = true
|
102
|
-
end
|
34
|
+
RSpec::Core::RakeTask.new do |task|
|
35
|
+
task.pattern = 'spec/**/*_spec.rb'
|
36
|
+
task.verbose = false
|
103
37
|
end
|
104
|
-
|
data/bin/translate
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
$:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
|
4
4
|
|
5
|
-
require 'rubygems' unless
|
5
|
+
require 'rubygems' unless defined?(Gem)
|
6
6
|
require 'google_translate'
|
7
7
|
|
8
8
|
#$KCODE='u'
|
@@ -17,7 +17,7 @@ class Translate
|
|
17
17
|
TEXT
|
18
18
|
|
19
19
|
def initialize
|
20
|
-
@translator =
|
20
|
+
@translator = GoogleTranslate.new
|
21
21
|
end
|
22
22
|
|
23
23
|
def print_languages list, title
|
@@ -59,27 +59,23 @@ class Translate
|
|
59
59
|
|
60
60
|
print_languages hash[:from_languages], "From Languages:"
|
61
61
|
print_languages hash[:to_languages], "To Languages:"
|
62
|
-
#when 'detect' then
|
63
|
-
# language = @translator.detect_language(ARGV.shift)
|
64
|
-
#
|
65
|
-
# puts "Language: #{language.inspect}"
|
66
62
|
when /(.*):(.*)/ then
|
67
63
|
from_text = ARGV.join(' ')
|
68
64
|
from = $1
|
69
65
|
to = $2
|
70
66
|
|
71
67
|
display(@translator.translate(from.to_sym, to.to_sym, from_text))
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
68
|
+
when /(.*)/ then
|
69
|
+
from_text = ARGV.join(' ')
|
70
|
+
|
71
|
+
from = "auto"
|
72
|
+
to = $1
|
73
|
+
|
74
|
+
begin
|
75
|
+
display(@translator.translate(from.to_sym, to.to_sym, from_text))
|
76
|
+
rescue Exception => e
|
77
|
+
puts "Error: " + e.message
|
78
|
+
end
|
83
79
|
end
|
84
80
|
end
|
85
81
|
end
|
data/google-translate.gemspec
CHANGED
@@ -1,67 +1,22 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
2
|
|
6
|
-
|
7
|
-
s.name = %q{google-translate}
|
8
|
-
s.version = "0.8.5"
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/lib/google_translate/version')
|
9
4
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
"CHANGES",
|
21
|
-
"README",
|
22
|
-
"Rakefile",
|
23
|
-
"VERSION",
|
24
|
-
"bin/t",
|
25
|
-
"bin/t.bat",
|
26
|
-
"bin/translate",
|
27
|
-
"bin/translate.bat",
|
28
|
-
"google-translate.gemspec",
|
29
|
-
"lib/google_translate.rb"
|
30
|
-
]
|
31
|
-
s.homepage = %q{http://github.com/shvets/google-translate}
|
32
|
-
s.require_paths = ["lib"]
|
33
|
-
s.requirements = ["none"]
|
34
|
-
s.rubygems_version = %q{1.6.2}
|
35
|
-
s.summary = %q{Simple client for Google Translate API (Summary).}
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "google-translate"
|
7
|
+
spec.summary = %q{Simple client for Google Translate API.}
|
8
|
+
spec.description = %q{Simple client for Google Translate API.}
|
9
|
+
spec.email = "alexander.shvets@gmail.com"
|
10
|
+
spec.authors = ["Alexander Shvets"]
|
11
|
+
spec.homepage = "http://github.com/shvets/google-translate"
|
12
|
+
spec.executables = ["translate", "t"]
|
36
13
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
s.add_runtime_dependency(%q<json_pure>, [">= 0"])
|
42
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
43
|
-
s.add_development_dependency(%q<gemcutter>, [">= 0"])
|
44
|
-
s.add_runtime_dependency(%q<json_pure>, [">= 1.1.4"])
|
45
|
-
s.add_runtime_dependency(%q<json_pure>, [">= 0"])
|
46
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
47
|
-
s.add_development_dependency(%q<gemcutter>, [">= 0"])
|
48
|
-
else
|
49
|
-
s.add_dependency(%q<json_pure>, [">= 0"])
|
50
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
51
|
-
s.add_dependency(%q<gemcutter>, [">= 0"])
|
52
|
-
s.add_dependency(%q<json_pure>, [">= 1.1.4"])
|
53
|
-
s.add_dependency(%q<json_pure>, [">= 0"])
|
54
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
55
|
-
s.add_dependency(%q<gemcutter>, [">= 0"])
|
56
|
-
end
|
57
|
-
else
|
58
|
-
s.add_dependency(%q<json_pure>, [">= 0"])
|
59
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
60
|
-
s.add_dependency(%q<gemcutter>, [">= 0"])
|
61
|
-
s.add_dependency(%q<json_pure>, [">= 1.1.4"])
|
62
|
-
s.add_dependency(%q<json_pure>, [">= 0"])
|
63
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
64
|
-
s.add_dependency(%q<gemcutter>, [">= 0"])
|
65
|
-
end
|
14
|
+
spec.files = `git ls-files`.split($\)
|
15
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
|
+
spec.require_paths = ["lib"]
|
17
|
+
spec.version = GoogleTranslate::VERSION
|
66
18
|
end
|
67
19
|
|
20
|
+
|
21
|
+
|
22
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/lib/google_translate/version')
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "google-translate"
|
7
|
+
spec.summary = %q{Simple client for Google Translate API.}
|
8
|
+
spec.description = %q{Simple client for Google Translate API.}
|
9
|
+
spec.email = "alexander.shvets@gmail.com"
|
10
|
+
spec.authors = ["Alexander Shvets"]
|
11
|
+
spec.homepage = "http://github.com/shvets/google-translate"
|
12
|
+
spec.executables = ["translate", "t"]
|
13
|
+
|
14
|
+
spec.files = `git ls-files`.split($\)
|
15
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
|
+
spec.require_paths = ["lib"]
|
17
|
+
spec.version = GoogleTranslate::VERSION
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
data/lib/google_translate.rb
CHANGED
@@ -1,132 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'open-uri'
|
4
|
-
|
5
|
-
require 'cgi'
|
6
|
-
require 'json'
|
7
|
-
|
8
|
-
module Google
|
9
|
-
|
10
|
-
Language = Struct.new(:name, :code) do
|
11
|
-
def to_s
|
12
|
-
"(" + code + ": " + name + ")"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Translator
|
17
|
-
GOOGLE_TRANSLATE_SERVICE_URL = "http://translate.google.com"
|
18
|
-
|
19
|
-
def self.Exception(*names)
|
20
|
-
cl = Module === self ? self : Object
|
21
|
-
names.each {|n| cl.const_set(n, Class.new(Exception))}
|
22
|
-
end
|
23
|
-
|
24
|
-
Exception :MissingFromLanguage, :MissingToLanguage, :MissingTextLanguage,
|
25
|
-
:TranslateServerIsDown, :InvalidResponse, :MissingText, :MissingTestText
|
26
|
-
|
27
|
-
def translate(from, to, from_text, options={})
|
28
|
-
raise(MissingFromLanguage) if from.nil?
|
29
|
-
raise(MissingToLanguage) if to.nil?
|
30
|
-
raise(MissingTextLanguage) if from_text.nil?
|
31
|
-
|
32
|
-
begin
|
33
|
-
url = GOOGLE_TRANSLATE_SERVICE_URL + "/translate_a/t?client=t&text=#{from_text}&hl=#{from}&sl=auto&tl=#{to}&multires=1&prev=btn&ssel=0&tsel=4&uptl=#{to}&alttl=#{from}&sc=1"
|
34
|
-
|
35
|
-
open(URI.escape(url)) do |stream|
|
36
|
-
content = stream.read
|
37
|
-
|
38
|
-
s = content.split(',').collect {|s| s == '' ? "\"\"" : s}.join(",")
|
39
|
-
|
40
|
-
result = JSON.parse(s)
|
41
|
-
|
42
|
-
raise(TranslateServerIsDown) if (!result || result.empty?)
|
43
|
-
|
44
|
-
# raise(InvalidResponse, result["responseDetails"]) if response.code.to_i != 200 # success
|
45
|
-
|
46
|
-
r1 = result[0][0][0]
|
47
|
-
r2 = result[0][0][2]
|
48
|
-
|
49
|
-
[r1, r2]
|
50
|
-
end
|
51
|
-
rescue Exception => e
|
52
|
-
raise(TranslateServerIsDown)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
# def detect_language(test_text)
|
57
|
-
|
58
|
-
# raise(MissingTestText) if test_text.nil?
|
59
|
-
|
60
|
-
# begin
|
61
|
-
# response = self.class.get("/detect", :query => {:q => test_text})
|
62
|
-
# response = (response && response.parsed_response) ? response.parsed_response : nil
|
63
|
-
# raise(TranslateServerIsDown) if (!response || response.empty?)
|
64
|
-
# response_data = response["responseData"]
|
65
|
-
# return response_data
|
66
|
-
# rescue HTTParty::ResponseError
|
67
|
-
# raise(TranslateServerIsDown)
|
68
|
-
# end
|
69
|
-
#end
|
70
|
-
|
71
|
-
def supported_languages
|
72
|
-
fetch_languages(GOOGLE_TRANSLATE_SERVICE_URL , [])
|
73
|
-
end
|
74
|
-
|
75
|
-
private
|
76
|
-
|
77
|
-
def fetch_languages(request, keys)
|
78
|
-
response = {}
|
79
|
-
|
80
|
-
open(URI.escape(request)) do |stream|
|
81
|
-
content = stream.read
|
82
|
-
|
83
|
-
from_languages = collect_languages content, 0, 'sl', 'gt-sl'
|
84
|
-
to_languages = collect_languages content, 1, 'tl', 'gt-tl'
|
85
|
-
|
86
|
-
response[:from_languages] = from_languages
|
87
|
-
response[:to_languages] = to_languages
|
88
|
-
end
|
89
|
-
|
90
|
-
response
|
91
|
-
end
|
92
|
-
|
93
|
-
def collect_languages buffer, index, tag_name, tag_id
|
94
|
-
languages = []
|
95
|
-
|
96
|
-
spaces = '\s?'
|
97
|
-
quote = '(\s|\'|")?'
|
98
|
-
|
99
|
-
|
100
|
-
id_part = "id#{spaces}=#{spaces}#{quote}#{tag_id}#{quote}"
|
101
|
-
name_part = "name#{spaces}=#{spaces}#{quote}#{tag_name}#{quote}"
|
102
|
-
tabindex_part = "tabindex#{spaces}=#{spaces}#{quote}0#{quote}"
|
103
|
-
phrase = "#{spaces}#{id_part}#{spaces}#{name_part}#{spaces}#{tabindex_part}#{spaces}"
|
104
|
-
|
105
|
-
re1 = buffer.split(%r{<select#{phrase}>(.*)?</select>}).select{|x| x =~ %r{<option} }
|
106
|
-
|
107
|
-
stopper = "</select></div>"
|
108
|
-
|
109
|
-
text = re1[index]
|
110
|
-
|
111
|
-
if index == 0
|
112
|
-
pos = text.index(stopper)
|
113
|
-
text = text[0..pos]
|
114
|
-
end
|
115
|
-
|
116
|
-
re2 = /<option(\s*)value="([a-z|A-Z|-]*)">([a-z|A-Z|\(|\)|\s]*)<\/option>/
|
117
|
-
matches = text.gsub(/selected/i, '').squeeze.scan(re2)
|
118
|
-
|
119
|
-
if matches.size == 0
|
120
|
-
re2 = /<option(\s*)value=([a-z|A-Z|-]*)>([a-z|A-Z|\(|\)|\s]*)<\/option>/
|
121
|
-
matches = text.gsub(/selected/i, '').squeeze.scan(re2)
|
122
|
-
end
|
123
|
-
|
124
|
-
matches.each do |m|
|
125
|
-
languages << Language.new(m[2], m[1])
|
126
|
-
end
|
127
|
-
|
128
|
-
languages
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
end
|
1
|
+
require 'google_translate/language'
|
2
|
+
require 'google_translate/google_translate'
|