google-translate 0.6.3

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/CHANGES ADDED
@@ -0,0 +1,30 @@
1
+
2
+ = Google-Translate Changelog
3
+
4
+ == Version 0.5.5
5
+
6
+ * Initial release.
7
+
8
+ == Version 0.5.6
9
+
10
+ * Adding support for ruby 1.9.x
11
+
12
+ == Version 0.5.7
13
+
14
+ * Removing text duplication from help
15
+
16
+ == Version 0.5.8
17
+
18
+ * Merging changes from bragi: removing warnings, adding exceptions
19
+
20
+ == Version 0.5.9
21
+
22
+ * Adding alias: "t" for "translate" command
23
+
24
+ == Version 0.6.1
25
+
26
+ * Adding error handling
27
+
28
+ == Version 0.6.2
29
+
30
+ * Reflecting changes in how google returns supported languages list
data/README ADDED
@@ -0,0 +1,16 @@
1
+ = Google-Translate -- Client for Google Translate API
2
+
3
+ = Installing Google-Translate
4
+
5
+ == Installing the Gem
6
+ $ sudo gem sources -a http://gems.github.com
7
+ $ sudo gem install google-translate
8
+
9
+ == Usage
10
+
11
+ translate list - displays the list of supported languages
12
+ translate detect "hello world" - detects language of text
13
+ translate en:ru "hello world" - or
14
+ translate en:ru hello world - translates from en to ru
15
+ translate ru "hello world" - or
16
+ translate ru hello world - translated from auto-detected language to ru
data/Rakefile ADDED
@@ -0,0 +1,66 @@
1
+ # Rakefile for google-translate
2
+
3
+ require 'rubygems'
4
+ require 'rake/gempackagetask'
5
+ require 'rake/testtask'
6
+ require 'spec/rake/spectask'
7
+ require 'rake/rdoctask'
8
+ require 'rcov/rcovtask'
9
+
10
+ spec_name = 'google-translate.gemspec'
11
+
12
+ SPEC = Gem::Specification.load(spec_name)
13
+
14
+ Rake::GemPackageTask.new(SPEC) do |pkg|
15
+ #pkg.need_tar = true
16
+ #pkg.need_zip = true
17
+ end
18
+
19
+ Spec::Rake::SpecTask.new do |task|
20
+ task.libs << 'lib'
21
+ task.pattern = 'spec/**/*_spec.rb'
22
+ task.verbose = false
23
+ end
24
+
25
+ Rake::RDocTask.new do |rdoc|
26
+ rdoc.rdoc_dir = 'rdoc'
27
+ rdoc.title = 'teststuff'
28
+ rdoc.options << '--line-numbers' << '--inline-source'
29
+ rdoc.rdoc_files.include('README*')
30
+ rdoc.rdoc_files.include('lib/**/*.rb')
31
+ end
32
+
33
+ Rcov::RcovTask.new do |task|
34
+ task.libs << 'test'
35
+ task.test_files = FileList['test/**/*_test.rb']
36
+ task.verbose = true
37
+ end
38
+
39
+ desc "Run gem code locally"
40
+ task :"run:gem" do
41
+ command = "bin/translate " + (ENV['params'].nil? ? '' : ENV['params'])
42
+ puts ruby("#{command}")
43
+ end
44
+
45
+ desc "test gem compatibility with github"
46
+ task :"github:validate" do
47
+ require 'yaml'
48
+
49
+ require 'rubygems/specification'
50
+ data = File.read(spec_name)
51
+ spec = nil
52
+
53
+ if data !~ %r{!ruby/object:Gem::Specification}
54
+ Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
55
+ else
56
+ spec = YAML.load(data)
57
+ end
58
+
59
+ spec.validate
60
+
61
+ puts spec
62
+ puts "OK"
63
+ end
64
+
65
+
66
+ task :default => :rcov
data/bin/t ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
4
+
5
+ load File.dirname(__FILE__) + '/translate'
6
+
data/bin/translate ADDED
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
4
+
5
+ require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
6
+ require 'google_translate'
7
+
8
+ #$KCODE='u'
9
+
10
+ class Translate
11
+
12
+ USAGE= <<-TEXT
13
+ Usage:
14
+ translate list - displays the list of supported languages
15
+ translate detect "hello world" - detects language of text
16
+ translate en:ru "hello world" - translates from en to ru
17
+ translate ru "hello world" - translated from auto-detected language to ru
18
+ TEXT
19
+
20
+ def initialize
21
+ @translator = Google::Translator.new
22
+ end
23
+
24
+ def print_languages list, title
25
+ puts title
26
+ puts list.join(', ')
27
+ end
28
+
29
+ def display text
30
+ if RUBY_PLATFORM =~ /mswin32/
31
+ File.open("temp.txt", "w") {|f| f.write text }
32
+ %x[notepad temp.txt]
33
+ else
34
+ puts text
35
+ end
36
+ end
37
+
38
+ def run
39
+ if(ARGV.size == 0)
40
+ puts USAGE and return
41
+ end
42
+
43
+ case ARGV.shift
44
+
45
+ when 'list' then
46
+ hash = @translator.supported_languages
47
+
48
+ print_languages hash[:from_languages], "From Languages:"
49
+ print_languages hash[:to_languages], "To Languages:"
50
+ when 'detect' then
51
+ language = @translator.detect_language(ARGV.shift)
52
+
53
+ puts "Language: #{language.inspect}"
54
+ when /(..):(..)/ then
55
+ from_text = ARGV.join(' ')
56
+ from = $1
57
+ to = $2
58
+
59
+ display(@translator.translate(from.to_sym, to.to_sym, from_text))
60
+ when /(..)/ then
61
+ from_text = ARGV.join(' ')
62
+
63
+ from = @translator.detect_language(from_text)['language']
64
+ to = $1
65
+
66
+ begin
67
+ display(@translator.translate(from.to_sym, to.to_sym, from_text))
68
+ rescue Exception => e
69
+ puts "Error: " + e.message
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ Translate.new.run
data/bin/translate.bat ADDED
@@ -0,0 +1,6 @@
1
+ @ECHO OFF
2
+ IF NOT "%~f0" == "~f0" GOTO :WinNT
3
+ @"ruby.exe" "C:/Ruby/ruby-1.9.1/bin/translate" %1 %2 %3 %4 %5 %6 %7 %8 %9
4
+ GOTO :EOF
5
+ :WinNT
6
+ @"ruby.exe" "%~dpn0" %*
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{google-translate}
5
+ s.version = "0.6.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+
9
+ s.authors = ["Alexander Shvets"]
10
+ s.date = %q{2009-01-21}
11
+ s.description = %q{Simple client for Google Translate API.}
12
+ s.email = %q{alexander.shvets@gmail.com}
13
+
14
+ s.files = ["CHANGES", "google-translate.gemspec", "Rakefile", "README", "lib/google_translate.rb",
15
+ "bin/translate", "bin/translate.bat", "spec/spec_helper.rb" , "spec/translate_spec.rb"]
16
+
17
+ s.has_rdoc = true
18
+ s.homepage = %q{http://github.com/shvets/google-translate}
19
+ s.require_paths = ["lib"]
20
+ s.rubyforge_project = %q{google-translate}
21
+ s.rubygems_version = %q{1.3.2}
22
+ s.summary = %q{Simple client for Google Translate API.}
23
+
24
+ if s.respond_to? :specification_version then
25
+ s.specification_version = 2
26
+ end
27
+
28
+ s.executables = ['translate', 't']
29
+ s.platform = Gem::Platform::RUBY
30
+ s.requirements = ["none"]
31
+ s.bindir = "bin"
32
+
33
+ s.add_dependency("json_pure", ">= 1.1.4")
34
+ end
@@ -0,0 +1,133 @@
1
+ # google_translate.rb
2
+
3
+ require 'open-uri'
4
+ require 'cgi'
5
+ require 'json'
6
+
7
+ module Google
8
+ Language = Struct.new(:name, :code) do
9
+ def to_s
10
+ "(" + code + ": " + name + ")"
11
+ end
12
+ end
13
+
14
+ class Translator
15
+ def self.Exception(*names)
16
+ cl = Module === self ? self : Object
17
+ names.each {|n| cl.const_set(n, Class.new(Exception))}
18
+ end
19
+
20
+ Exception :MissingFromLanguage, :MissingToLanguage, :MissingTextLanguage,
21
+ :TranslateServerIsDown, :InvalidResponse, :MissingText, :MissingTestText
22
+
23
+ URL_STRING = "http://ajax.googleapis.com/ajax/services/language/"
24
+ URL2_STRING = "http://translate.google.com"
25
+
26
+ def translate(from, to, from_text, options={})
27
+ raise(MissingFromLanguage) if from.nil?
28
+ raise(MissingToLanguage) if to.nil?
29
+ raise(MissingTextLanguage) if from_text.nil?
30
+
31
+ request = URL_STRING + "translate?v=1.0&langpair=#{from}%7C#{to}&q=" + CGI.escape(from_text)
32
+
33
+ begin
34
+ response = call_service(request, [:response_status, :response_details, :response_data])
35
+
36
+ raise(TranslateServerIsDown) if response.empty?
37
+
38
+ raise(InvalidResponse, response[:response_details]) if response[:response_status] != 200 # success
39
+
40
+ to_text = response[:response_data]['translatedText']
41
+
42
+ (options[:html]) ? CGI.unescapeHTML(to_text) : to_text
43
+ rescue OpenURI::HTTPError
44
+ raise(TranslateServerIsDown)
45
+ end
46
+ end
47
+
48
+ def detect_language(test_text)
49
+ raise(MissingTestText) if test_text.nil?
50
+
51
+ request = URL_STRING + "detect?v=1.0&q=" + CGI.escape(test_text)
52
+
53
+ begin
54
+ response = call_service(request, [:response_data])
55
+ response_data = response[:response_data]
56
+
57
+ raise(TranslateServerIsDown) if response.empty?
58
+
59
+ response_data
60
+ rescue OpenURI::HTTPError
61
+ raise(TranslateServerIsDown)
62
+ end
63
+ end
64
+
65
+ def supported_languages
66
+ call_service2(URL2_STRING , [])
67
+ end
68
+
69
+ private
70
+
71
+ def camelize(str)
72
+ words = str.split('_')
73
+
74
+ words[0] + words[1..-1].map {|w| w.capitalize}.join
75
+ end
76
+
77
+ def call_service(request, keys)
78
+ response = {}
79
+
80
+ open(request) do |stream|
81
+ content = stream.read
82
+
83
+ unless content.nil?
84
+ json = JSON.parse(content)
85
+
86
+ keys.each do |key|
87
+ response[key] = json[camelize(key.to_s)]
88
+ end
89
+ end
90
+ end
91
+
92
+ response
93
+ end
94
+
95
+ def call_service2(request, keys)
96
+ response = {}
97
+
98
+ open(URI.escape(request)) do |stream|
99
+ content = stream.read
100
+
101
+ from_languages = collect_languages content, 'sl', 'old_sl'
102
+ to_languages = collect_languages content, 'tl', 'old_tl'
103
+
104
+ response[:from_languages] = from_languages
105
+ response[:to_languages] = to_languages
106
+ end
107
+
108
+ response
109
+ end
110
+
111
+ def collect_languages buffer, tag_name, tag_id
112
+ languages = []
113
+
114
+ spaces = '\s?'
115
+ quote = '(\s|\'|")?'
116
+ text = '(.*)'
117
+
118
+ re1 = /<select#{spaces}name=#{quote}#{tag_name}#{quote}#{spaces}id=#{quote}#{tag_id}#{quote}#{spaces}tabindex=#{spaces}#{quote}0#{quote}#{spaces}>(.*)<\/select>/
119
+ text = re1.match(buffer)[7]
120
+
121
+ re2 = /<option(\s*)value="([a-z|A-Z]*)">([a-z|A-Z]*)<\/option>/
122
+
123
+ matches = text.scan(re2)
124
+
125
+ matches.each do |m|
126
+ languages << Language.new(m[2], m[1])
127
+ end
128
+
129
+ languages
130
+ end
131
+ end
132
+
133
+ end
@@ -0,0 +1,11 @@
1
+ # spec_helper.rb
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+
6
+ # add lib directory
7
+ $:.unshift File.dirname(__FILE__) + '/../lib'
8
+
9
+ Spec::Runner.configure do |config|
10
+ config.mock_with :mocha
11
+ end
@@ -0,0 +1,58 @@
1
+ # translate_spec.rb
2
+
3
+ require File.dirname(__FILE__) + '/spec_helper'
4
+
5
+ require 'google_translate'
6
+
7
+ module Google
8
+
9
+ describe Translator do
10
+ before :each do
11
+ @translator = Translator.new
12
+ end
13
+
14
+ it "should raise an error if one of parameters is missing" do
15
+ lambda {
16
+ @translator.translate(nil, :ru)
17
+ }.should raise_error
18
+
19
+ lambda {
20
+ @translator.translate(:en, nil)
21
+ }.should raise_error
22
+
23
+ lambda {
24
+ @translator.translate(:en, :ru, nil)
25
+ }.should raise_error
26
+ end
27
+
28
+ it "should translate test string from one language to another" do
29
+ r = @translator.translate(:en, :ru, "hello world!")
30
+
31
+ puts r
32
+
33
+ r.size.should be > 0
34
+ end
35
+
36
+ it "should detect the language of a string" do
37
+ @translator.detect_language("bonjour tout le monde")['language'].should be == "fr"
38
+ end
39
+
40
+ it "should raise an error if no string" do
41
+ lambda {
42
+ @translator.detect_language(nil)
43
+ }.should raise_error
44
+ end
45
+
46
+ it "should return unreliable flag if language is not recognized" do
47
+ @translator.detect_language("azafretmkldt")['isReliable'].should be_false
48
+ end
49
+
50
+ it "should return list of supportd languages" do
51
+ languages = @translator.supported_languages
52
+
53
+ languages[:from_languages].size.should > 0
54
+ languages[:to_languages].size.should > 0
55
+ end
56
+ end
57
+
58
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: google-translate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.3
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Shvets
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-21 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json_pure
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.1.4
24
+ version:
25
+ description: Simple client for Google Translate API.
26
+ email: alexander.shvets@gmail.com
27
+ executables:
28
+ - translate
29
+ - t
30
+ extensions: []
31
+
32
+ extra_rdoc_files: []
33
+
34
+ files:
35
+ - CHANGES
36
+ - google-translate.gemspec
37
+ - Rakefile
38
+ - README
39
+ - lib/google_translate.rb
40
+ - bin/translate
41
+ - bin/translate.bat
42
+ - spec/spec_helper.rb
43
+ - spec/translate_spec.rb
44
+ has_rdoc: true
45
+ homepage: http://github.com/shvets/google-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
+ version: "0"
58
+ version:
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ requirements:
66
+ - none
67
+ rubyforge_project: google-translate
68
+ rubygems_version: 1.3.5
69
+ signing_key:
70
+ specification_version: 2
71
+ summary: Simple client for Google Translate API.
72
+ test_files: []
73
+