google-translate 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
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
+