opengotham-rtranslate 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/History.txt +19 -0
- data/MIT-LICENSE +20 -0
- data/Manifest.txt +13 -0
- data/README.txt +25 -0
- data/Rakefile +23 -0
- data/VERSION +1 -0
- data/bin/rtranslate +46 -0
- data/lib/rtranslate.rb +31 -0
- data/lib/rtranslate/detection.rb +70 -0
- data/lib/rtranslate/language.rb +123 -0
- data/lib/rtranslate/rtranslate.rb +130 -0
- data/rtranslate.gemspec +43 -0
- data/tests/ts_detection.rb +31 -0
- data/tests/ts_translate.rb +58 -0
- metadata +113 -0
data/.gitignore
ADDED
data/History.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
V1.3 Dec 18th, 2009
|
2
|
+
* Enable the translation for the long string which is supposed to be more than 500 characters. The lib will split the text into several groups 500 by 500 and then join the response translated text together.
|
3
|
+
|
4
|
+
V1.2 Sep 17th, 2009
|
5
|
+
* Enable the auto-detect source features of google translate api
|
6
|
+
|
7
|
+
V1.1 July 11th, 2009
|
8
|
+
* Add Google AJAX Language Dection support
|
9
|
+
|
10
|
+
v1.0 Dec 16th, 2008
|
11
|
+
* using the Google AJAX Language API instead of scrape
|
12
|
+
* add the batch translation support
|
13
|
+
* refactor the whole project
|
14
|
+
|
15
|
+
v0.2 Nov 16, 2007
|
16
|
+
* add a command line tool.
|
17
|
+
|
18
|
+
v0.1 Nov 15, 2007
|
19
|
+
* initial release
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2007 Dingding Ye
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
History.txt
|
2
|
+
MIT-LICENSE
|
3
|
+
Manifest.txt
|
4
|
+
README.txt
|
5
|
+
Rakefile
|
6
|
+
bin/rtranslate
|
7
|
+
lib/rtranslate.rb
|
8
|
+
lib/rtranslate/language.rb
|
9
|
+
lib/rtranslate/rtranslate.rb
|
10
|
+
lib/rtranslate/detection.rb
|
11
|
+
rtranslate.gemspec
|
12
|
+
tests/ts_translate.rb
|
13
|
+
tests/ts_detection.rb
|
data/README.txt
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
= google-api-transalte-ruby
|
2
|
+
A simple, unofficial, ruby client API for using Google Translate.
|
3
|
+
|
4
|
+
== Install
|
5
|
+
|
6
|
+
sudo gem install sishen-rtranslate
|
7
|
+
|
8
|
+
== Usage
|
9
|
+
1.
|
10
|
+
{{{
|
11
|
+
require "rtranslate"
|
12
|
+
result = Translate.t("xxx", Language::English, Language::CHINESE_SIMPLIFIED)
|
13
|
+
}}}
|
14
|
+
|
15
|
+
2.
|
16
|
+
{{{
|
17
|
+
$rtranslate -f en -t zh-CN xxx
|
18
|
+
}}}
|
19
|
+
|
20
|
+
Check test for more examples
|
21
|
+
|
22
|
+
== COPYRIGHT
|
23
|
+
|
24
|
+
Copyright (c) 2007 Dingding Ye <yedingding@gmail.com>
|
25
|
+
Distributed under MIT License
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rcov/rcovtask'
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'jeweler'
|
9
|
+
Jeweler::Tasks.new do |g|
|
10
|
+
g.name = 'opengotham-rtranslate'
|
11
|
+
g.summary = %(Google translate ruby client api)
|
12
|
+
g.description = %(A simple, unofficial, ruby client API for using Google Translate.)
|
13
|
+
g.email = 'mjording@openogotham.com'
|
14
|
+
g.homepage = 'http://github.com/opengotham/rtranslate'
|
15
|
+
g.authors = %w(opengotham)
|
16
|
+
g.add_dependency 'json', '>= 1.1.3'
|
17
|
+
g.add_development_dependency 'shoulda'
|
18
|
+
g.add_development_dependency 'mocha'
|
19
|
+
end
|
20
|
+
Jeweler::GemcutterTasks.new
|
21
|
+
rescue LoadError
|
22
|
+
puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
|
23
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.3.0
|
data/bin/rtranslate
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
|
4
|
+
|
5
|
+
require 'rtranslate'
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
options = {}
|
9
|
+
opts = OptionParser.new do |opts|
|
10
|
+
opts.banner = <<-EOF
|
11
|
+
Usage:
|
12
|
+
rtranslate -f lang -t lang text
|
13
|
+
rtranslate -d text
|
14
|
+
EOF
|
15
|
+
|
16
|
+
opts.on("-fLANG", "--from LANG", "From Language LANG") do |x|
|
17
|
+
options[:from] = x
|
18
|
+
end
|
19
|
+
|
20
|
+
opts.on("-tLANG", "--to LANG", "To Language LANG") do |x|
|
21
|
+
options[:to] = x
|
22
|
+
end
|
23
|
+
|
24
|
+
opts.on("-d", "--detect", "Detect the text") do
|
25
|
+
options[:detect] = true
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on("-h", "--help", "Show this message") do
|
29
|
+
puts opts
|
30
|
+
exit
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
opts.parse!(ARGV)
|
35
|
+
text = ARGV.shift
|
36
|
+
|
37
|
+
unless (options[:detect] || options[:to] ) && text
|
38
|
+
puts opts
|
39
|
+
exit
|
40
|
+
end
|
41
|
+
|
42
|
+
if options[:detect]
|
43
|
+
STDOUT.puts(Translate.d(text))
|
44
|
+
else
|
45
|
+
STDOUT.puts(Translate.t(text, options[:from], options[:to]))
|
46
|
+
end
|
data/lib/rtranslate.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'rtranslate/language')
|
2
|
+
require File.join(File.dirname(__FILE__), 'rtranslate/rtranslate')
|
3
|
+
require File.join(File.dirname(__FILE__), 'rtranslate/detection')
|
4
|
+
require 'uri'
|
5
|
+
require 'open-uri'
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'json'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rubygems'
|
11
|
+
require 'json'
|
12
|
+
end
|
13
|
+
|
14
|
+
unless defined?(ActiveSupport)
|
15
|
+
require 'activesupport'
|
16
|
+
end
|
17
|
+
|
18
|
+
$KCODE = 'u'
|
19
|
+
|
20
|
+
include Translate
|
21
|
+
def Translate.t(text, from, to)
|
22
|
+
RTranslate.translate(text, from, to)
|
23
|
+
rescue
|
24
|
+
"Error: " + $!
|
25
|
+
end
|
26
|
+
|
27
|
+
def Translate.d(text)
|
28
|
+
Detection.detect(text)
|
29
|
+
rescue
|
30
|
+
"Error: " + $!
|
31
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# The program is a simple, unofficial, ruby client API
|
2
|
+
# for using Google Translate.
|
3
|
+
#
|
4
|
+
# Author:: Dingding Ye (mailto:yedingding@gmail.com)
|
5
|
+
# Copyright:: Copyright (c) 2007 Dingding Ye
|
6
|
+
# License:: Distributes under MIT License
|
7
|
+
|
8
|
+
module Translate
|
9
|
+
class DetectionResponse
|
10
|
+
attr_reader :abbrev
|
11
|
+
attr_reader :language
|
12
|
+
attr_reader :reliability
|
13
|
+
attr_reader :confidence
|
14
|
+
|
15
|
+
def initialize(json)
|
16
|
+
@abbrev = json["language"]
|
17
|
+
@language = Google::Language::Languages[@abbrev]
|
18
|
+
@reliability = json["isReliable"]
|
19
|
+
@confidence = json["confidence"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_s
|
23
|
+
abbrev
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Detection
|
28
|
+
# Google AJAX Language REST Service URL
|
29
|
+
GOOGLE_DETECTION_URL = "http://ajax.googleapis.com/ajax/services/language/detect"
|
30
|
+
|
31
|
+
# Default version of Google AJAX Language API
|
32
|
+
DEFAULT_VERSION = "1.0"
|
33
|
+
|
34
|
+
attr_reader :version, :key
|
35
|
+
|
36
|
+
class << self
|
37
|
+
def detect(text)
|
38
|
+
Detection.new.detect(text)
|
39
|
+
end
|
40
|
+
alias_method :d, :detect
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(version = DEFAULT_VERSION, key = nil)
|
44
|
+
@version = version
|
45
|
+
@key = key
|
46
|
+
end
|
47
|
+
|
48
|
+
def detect(text, details = false)
|
49
|
+
url = "#{GOOGLE_DETECTION_URL}?q=#{text}&v=#{@version}"
|
50
|
+
if @key
|
51
|
+
url << "&key=#{@key}"
|
52
|
+
end
|
53
|
+
detection_response = do_detect(url)
|
54
|
+
details ? detection_response : detection_response.abbrev
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def do_detect(url)
|
59
|
+
jsondoc = open(URI.escape(url)).read
|
60
|
+
response = JSON.parse(jsondoc)
|
61
|
+
if response["responseStatus"] == 200
|
62
|
+
DetectionResponse.new(response["responseData"])
|
63
|
+
else
|
64
|
+
raise StandardError, response["responseDetails"]
|
65
|
+
end
|
66
|
+
rescue Exception => e
|
67
|
+
raise StandardError, e.message
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
module Google
|
2
|
+
module Language
|
3
|
+
{"lo"=>"LAOTHIAN",
|
4
|
+
"ta"=>"TAMIL",
|
5
|
+
"eu"=>"BASQUE",
|
6
|
+
"iw"=>"HEBREW",
|
7
|
+
"my"=>"BURMESE",
|
8
|
+
"uk"=>"UKRAINIAN",
|
9
|
+
"sk"=>"SLOVAK",
|
10
|
+
"ky"=>"KYRGYZ",
|
11
|
+
"zh-TW"=>"CHINESE_TRADITIONAL",
|
12
|
+
"pa"=>"PUNJABI",
|
13
|
+
"sl"=>"SLOVENIAN",
|
14
|
+
"ps"=>"PASHTO",
|
15
|
+
"ru"=>"RUSSIAN",
|
16
|
+
"mk"=>"MACEDONIAN",
|
17
|
+
"zh"=>"CHINESE",
|
18
|
+
"te"=>"TELUGU",
|
19
|
+
"bn"=>"BENGALI",
|
20
|
+
"cy"=>"WELSH",
|
21
|
+
"hr"=>"CROATIAN",
|
22
|
+
"ml"=>"MALAYALAM",
|
23
|
+
"lt"=>"LITHUANIAN",
|
24
|
+
"bo"=>"TIBETAN",
|
25
|
+
"ja"=>"JAPANESE",
|
26
|
+
"tg"=>"TAJIK",
|
27
|
+
"af"=>"AFRIKAANS",
|
28
|
+
"fr"=>"FRENCH",
|
29
|
+
"kk"=>"KAZAKH",
|
30
|
+
"th"=>"THAI",
|
31
|
+
"sq"=>"ALBANIAN",
|
32
|
+
"fa"=>"PERSIAN",
|
33
|
+
"lv"=>"LATVIAN",
|
34
|
+
"vi"=>"VIETNAMESE",
|
35
|
+
"ur"=>"URDU",
|
36
|
+
"az"=>"AZERBAIJANI",
|
37
|
+
"ne"=>"NEPALI",
|
38
|
+
"km"=>"KHMER",
|
39
|
+
"da"=>"DANISH",
|
40
|
+
"sr"=>"SERBIAN",
|
41
|
+
"hu"=>"HUNGARIAN",
|
42
|
+
"mn"=>"MONGOLIAN",
|
43
|
+
"gl"=>"GALICIAN",
|
44
|
+
"kn"=>"KANNADA",
|
45
|
+
"el"=>"GREEK",
|
46
|
+
"ko"=>"KOREAN",
|
47
|
+
"sa"=>"SANSKRIT",
|
48
|
+
"zh-CN"=>"CHINESE_SIMPLIFIED",
|
49
|
+
"gn"=>"GUARANI",
|
50
|
+
"dv"=>"DHIVEHI",
|
51
|
+
"or"=>"ORIYA",
|
52
|
+
"tl"=>"TAGALOG",
|
53
|
+
"chr"=>"CHEROKEE",
|
54
|
+
"en"=>"ENGLISH",
|
55
|
+
"hy"=>"ARMENIAN",
|
56
|
+
"mr"=>"MARATHI",
|
57
|
+
"sv"=>"SWEDISH",
|
58
|
+
"ms"=>"MALAY",
|
59
|
+
"am"=>"AMHARIC",
|
60
|
+
"eo"=>"ESPERANTO",
|
61
|
+
"sd"=>"SINDHI",
|
62
|
+
"pl"=>"POLISH",
|
63
|
+
"de"=>"GERMAN",
|
64
|
+
"be"=>"BELARUSIAN",
|
65
|
+
"nl"=>"DUTCH",
|
66
|
+
"mt"=>"MALTESE",
|
67
|
+
"sw"=>"SWAHILI",
|
68
|
+
"ka"=>"GEORGIAN",
|
69
|
+
"is"=>"ICELANDIC",
|
70
|
+
"ro"=>"ROMANIAN",
|
71
|
+
"ug"=>"UIGHUR",
|
72
|
+
"yi"=>"YIDDISH",
|
73
|
+
"hi"=>"HINDI",
|
74
|
+
"fi"=>"FINNISH",
|
75
|
+
"ku"=>"KURDISH",
|
76
|
+
"pt-PT"=>"PORTUGUESE",
|
77
|
+
"bg"=>"BULGARIAN",
|
78
|
+
"uz"=>"UZBEK",
|
79
|
+
"ga"=>"IRISH",
|
80
|
+
"it"=>"ITALIAN",
|
81
|
+
"tr"=>"TURKISH",
|
82
|
+
"bh"=>"BIHARI",
|
83
|
+
"es"=>"SPANISH",
|
84
|
+
"iu"=>"INUKTITUT",
|
85
|
+
"si"=>"SINHALESE",
|
86
|
+
"no"=>"NORWEGIAN",
|
87
|
+
"ca"=>"CATALAN",
|
88
|
+
"id"=>"INDONESIAN",
|
89
|
+
"ar"=>"ARABIC",
|
90
|
+
"cs"=>"CZECH",
|
91
|
+
"et"=>"ESTONIAN",
|
92
|
+
"gu"=>"GUJARATI"}
|
93
|
+
|
94
|
+
# judge whether the language is supported by google translate
|
95
|
+
def supported?(language)
|
96
|
+
if Languages.key?(language) || Languages.value?(language.upcase)
|
97
|
+
true
|
98
|
+
else
|
99
|
+
false
|
100
|
+
end
|
101
|
+
end
|
102
|
+
module_function :supported?
|
103
|
+
|
104
|
+
# get the abbrev of the language
|
105
|
+
def abbrev(language)
|
106
|
+
if supported?(language)
|
107
|
+
if Languages.key?(language)
|
108
|
+
language
|
109
|
+
else
|
110
|
+
language.upcase!
|
111
|
+
Languages.each do |k,v|
|
112
|
+
if v == language
|
113
|
+
return k
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
else
|
118
|
+
nil
|
119
|
+
end
|
120
|
+
end
|
121
|
+
module_function :abbrev
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# The program is a simple, unofficial, ruby client API
|
2
|
+
# for using Google Translate.
|
3
|
+
#
|
4
|
+
# Author:: Dingding Ye (mailto:yedingding@gmail.com)
|
5
|
+
# Copyright:: Copyright (c) 2007 Dingding Ye
|
6
|
+
# License:: Distributes under MIT License
|
7
|
+
|
8
|
+
module Translate
|
9
|
+
class UnsupportedLanguagePair < StandardError
|
10
|
+
end
|
11
|
+
|
12
|
+
class RTranslate
|
13
|
+
# Google AJAX Language REST Service URL
|
14
|
+
GOOGLE_TRANSLATE_URL = "http://ajax.googleapis.com/ajax/services/language/translate"
|
15
|
+
|
16
|
+
# Default version of Google AJAX Language API
|
17
|
+
DEFAULT_VERSION = "1.0"
|
18
|
+
|
19
|
+
attr_accessor :version, :key
|
20
|
+
attr_reader :default_from, :default_to
|
21
|
+
|
22
|
+
class << self
|
23
|
+
def translate(text, from, to)
|
24
|
+
RTranslate.new.translate(text, { :from => from, :to => to })
|
25
|
+
end
|
26
|
+
alias_method :t, :translate
|
27
|
+
|
28
|
+
def translate_strings(text_array, from, to)
|
29
|
+
RTranslate.new.translate_strings(text_array, {:from => from, :to => to})
|
30
|
+
end
|
31
|
+
|
32
|
+
def translate_string_to_languages(text, options)
|
33
|
+
RTranslate.new.translate_string_to_languages(text, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def batch_translate(translate_options)
|
37
|
+
RTranslate.new.batch_translate(translate_options)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def initialize(version = DEFAULT_VERSION, key = nil, default_from = nil, default_to = nil)
|
42
|
+
@version = version
|
43
|
+
@key = key
|
44
|
+
@default_from = default_from
|
45
|
+
@default_to = default_to
|
46
|
+
|
47
|
+
if @default_from && !(Google::Lanauage.supported?(@default_from))
|
48
|
+
raise StandardError, "Unsupported source language '#{@default_from}'"
|
49
|
+
end
|
50
|
+
|
51
|
+
if @default_to && !(Google::Lanauage.supported?(@default_to))
|
52
|
+
raise StandardError, "Unsupported destination language '#{@default_to}'"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# translate the string from a source language to a target language.
|
57
|
+
#
|
58
|
+
# Configuration options:
|
59
|
+
# * <tt>:from</tt> - The source language
|
60
|
+
# * <tt>:to</tt> - The target language
|
61
|
+
def translate(text, options = { })
|
62
|
+
from = options[:from] || @default_from
|
63
|
+
to = options[:to] || @default_to
|
64
|
+
if (from.nil? || Google::Language.supported?(from)) && Google::Language.supported?(to)
|
65
|
+
from = from ? Google::Language.abbrev(from) : nil
|
66
|
+
to = Google::Language.abbrev(to)
|
67
|
+
langpair = "#{from}|#{to}"
|
68
|
+
|
69
|
+
text.mb_chars.scan(/(.{1,500})/).inject("") do |result, st|
|
70
|
+
url = "#{GOOGLE_TRANSLATE_URL}?q=#{st}&langpair=#{langpair}&v=#{@version}"
|
71
|
+
if @key
|
72
|
+
url << "&key=#{@key}"
|
73
|
+
end
|
74
|
+
result += do_translate(url)
|
75
|
+
end
|
76
|
+
else
|
77
|
+
raise UnsupportedLanguagePair, "Translation from '#{from}' to '#{to}' isn't supported yet!"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# translate several strings, all from the same source language to the same target language.
|
82
|
+
#
|
83
|
+
# Configuration options
|
84
|
+
# * <tt>:from</tt> - The source language
|
85
|
+
# * <tt>:to</tt> - The target language
|
86
|
+
def translate_strings(text_array, options = { })
|
87
|
+
text_array.collect do |text|
|
88
|
+
self.translate(text, options)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Translate one string into several languages.
|
93
|
+
#
|
94
|
+
# Configuration options
|
95
|
+
# * <tt>:from</tt> - The source language
|
96
|
+
# * <tt>:to</tt> - The target language list
|
97
|
+
# Example:
|
98
|
+
#
|
99
|
+
# translate_string_to_languages("China", {:from => "en", :to => ["zh-CN", "zh-TW"]})
|
100
|
+
def translate_string_to_languages(text, option)
|
101
|
+
option[:to].collect do |to|
|
102
|
+
self.translate(text, { :from => option[:from], :to => to })
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Translate several strings, each into a different language.
|
107
|
+
#
|
108
|
+
# Examples:
|
109
|
+
#
|
110
|
+
# batch_translate([["China", {:from => "en", :to => "zh-CN"}], ["Chinese", {:from => "en", :to => "zh-CN"}]])
|
111
|
+
def batch_translate(translate_options)
|
112
|
+
translate_options.collect do |text, option|
|
113
|
+
self.translate(text, option)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
def do_translate(url) #:nodoc:
|
119
|
+
jsondoc = open(URI.escape(url)).read
|
120
|
+
response = JSON.parse(jsondoc)
|
121
|
+
if response["responseStatus"] == 200
|
122
|
+
response["responseData"]["translatedText"]
|
123
|
+
else
|
124
|
+
raise StandardError, response["responseDetails"]
|
125
|
+
end
|
126
|
+
rescue Exception => e
|
127
|
+
raise StandardError, e.message
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
data/rtranslate.gemspec
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{rtranslate}
|
3
|
+
s.version = "1.3"
|
4
|
+
|
5
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
|
+
s.authors = ["Ye Dingding"]
|
7
|
+
s.date = %q{2009-07-11}
|
8
|
+
s.description = %q{rtranslate is a simple, unofficial, ruby client API for using Google Translate.}
|
9
|
+
s.email = %q{yedingding@gmail.com}
|
10
|
+
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
|
11
|
+
s.files = ["History.txt", "MIT-LICENSE", "Manifest.txt", "README.txt", "Rakefile", "rtranslate.gemspec", "bin/rtranslate",
|
12
|
+
"lib/rtranslate.rb", "lib/rtranslate/language.rb", "lib/rtranslate/rtranslate.rb", "tests/ts_translate.rb",
|
13
|
+
"bin/rtranslate", "lib/rtranslate.rb", "lib/rtranslate/language.rb",
|
14
|
+
"lib/rtranslate/rtranslate.rb", "lib/rtranslate/detection.rb", "tests/ts_detection.rb"]
|
15
|
+
s.has_rdoc = true
|
16
|
+
s.homepage = %q{http://github.com/sishen}
|
17
|
+
s.rdoc_options = ["--main", "README.txt"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubygems_version = %q{1.2.0}
|
20
|
+
s.summary = %q{a simple, unofficial, ruby client API for using Google Translate}
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 2
|
25
|
+
|
26
|
+
if current_version >= 3 then
|
27
|
+
s.add_development_dependency(%q<hoe>, [">= 1.7.0"])
|
28
|
+
s.add_development_dependency(%q<rspec>, [">= 1.1.4"])
|
29
|
+
s.add_development_dependency(%q<json>, [">= 1.1.3"])
|
30
|
+
s.add_development_dependency(%q<activesupprt>, [">= 2.2.0"])
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<hoe>, [">= 1.7.0"])
|
33
|
+
s.add_dependency(%q<rspec>, [">= 1.1.4"])
|
34
|
+
s.add_dependency(%q<json>, [">= 1.1.3"])
|
35
|
+
s.add_dependency(%q<activesupport>, [">= 2.2.0"])
|
36
|
+
end
|
37
|
+
else
|
38
|
+
s.add_dependency(%q<hoe>, [">= 1.7.0"])
|
39
|
+
s.add_dependency(%q<rspec>, [">= 1.1.4"])
|
40
|
+
s.add_dependency(%q<json>, [">= 1.1.3"])
|
41
|
+
s.add_dependency(%q<activesupport>, [">= 2.2.0"])
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
$:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rtranslate'
|
6
|
+
|
7
|
+
class Translate::DetectionTest < Test::Unit::TestCase
|
8
|
+
include Google::Language
|
9
|
+
def test_detection
|
10
|
+
d = Detection.new
|
11
|
+
assert_equal "es", d.detect("para poner este importante proyecto en práctica")
|
12
|
+
assert_equal "en", d.detect("this is a test of the Emergency text categorizing system.")
|
13
|
+
assert_equal "fr", d.detect("serait désigné peu après PDG d'Antenne 2 et de FR 3. Pas même lui ! Le")
|
14
|
+
assert_equal "it", d.detect("studio dell'uomo interiore? La scienza del cuore umano, che")
|
15
|
+
assert_equal "ro", d.detect("taiate pe din doua, in care vezi stralucind brun sau violet cristalele interioare")
|
16
|
+
assert_equal "pl", d.detect("na porozumieniu, na ³±czeniu si³ i ¶rodków. Dlatego szukam ludzi, którzy")
|
17
|
+
assert_equal "de", d.detect("sagt Hühsam das war bei Über eine Annonce in einem Frankfurter der Töpfer ein. Anhand von gefundenen gut kennt, hatte ihm die wahren Tats
|
18
|
+
achen Sechzehn Adorno-Schüler erinnern und daß ein Weiterdenken der Theorie für ihre Festlegung sind drei Jahre Erschütterung Einblick in die Abhängigkeit der Bauarbeiten
|
19
|
+
sei")
|
20
|
+
assert_equal "fi", d.detect("koulun arkistoihin pölyttymään, vaan nuoret saavat itse vaikuttaa ajatustensa eteenpäinviemiseen esimerkiksi")
|
21
|
+
assert_equal "sv", d.detect("enligt all sannolikhet för att få ro oavsiktligt intagit en för")
|
22
|
+
assert_equal "hu", d.detect("esôzéseket egy kissé túlméretezte, ebbôl kifolyólag a Földet egy hatalmas árvíz mosta el")
|
23
|
+
assert_equal "fi", d.detect("koulun arkistoihin pölyttymään, vaan nuoret saavat itse vaikuttaa ajatustensa eteenpäinviemiseen esimerkiksi")
|
24
|
+
assert_equal "nl", d.detect("tegen de kabinetsplannen. Een speciaal in het leven geroepen Landelijk")
|
25
|
+
assert_equal "da", d.detect("viksomhed, 58 pct. har et arbejde eller er under uddannelse, 76 pct. forsørges ikke længere af Kolding")
|
26
|
+
assert_equal "cs", d.detect("datují rokem 1862. Naprosto zakázán byl v pocitech smutku, beznadìje èi jiné")
|
27
|
+
assert_equal "no", d.detect("hånd på den enda hvitere restaurant-duken med en bevegelse så forfinet")
|
28
|
+
assert_equal "pt", d.detect("popular. Segundo o seu biógrafo, a Maria Adelaide auxiliava muita gente")
|
29
|
+
assert_equal "en", d.detect("TaffyDB finders looking nice so far!")
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
$:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rtranslate'
|
6
|
+
|
7
|
+
class Translate::TranslateTest < Test::Unit::TestCase
|
8
|
+
include Google::Language
|
9
|
+
def test_english_translate
|
10
|
+
assert_equal("مرحبا العالم", Translate.t("Hello world", "ENGLISH", "ARABIC"));
|
11
|
+
assert_equal("世界您好", Translate.t("Hello world", "ENGLISH", "CHINESE_SIMPLIFIED"));
|
12
|
+
assert_equal("Bonjour tout le monde", Translate.t("Hello world", "ENGLISH", "FRENCH"));
|
13
|
+
assert_equal("Hallo Welt", Translate.t("Hello world", "ENGLISH", "GERMAN"));
|
14
|
+
assert_equal("Ciao a tutti", Translate.t("Hello world", "ENGLISH", "ITALIAN"));
|
15
|
+
assert_equal("こんにちは、世界", Translate.t("Hello world", "ENGLISH", "JAPANESE"));
|
16
|
+
assert_equal("안녕하세요 세상", Translate.t("Hello world", "ENGLISH", "KOREAN"));
|
17
|
+
assert_equal("Olá mundo", Translate.t("Hello world", "ENGLISH", "PORTUGUESE"));
|
18
|
+
assert_equal("Привет мир", Translate.t("Hello world", "ENGLISH", "RUSSIAN"));
|
19
|
+
assert_equal("¡Hola, mundo", Translate.t("Hello world", "ENGLISH", "SPANISH"));
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_auto_detect_translate
|
23
|
+
assert_equal("مرحبا العالم", Translate.t("Hello world", nil, "ARABIC"));
|
24
|
+
assert_equal("世界您好", Translate.t("Hello world", nil, "CHINESE_SIMPLIFIED"));
|
25
|
+
assert_equal("Bonjour tout le monde", Translate.t("Hello world", nil, "FRENCH"));
|
26
|
+
assert_equal("Hallo Welt", Translate.t("Hello world", nil, "GERMAN"));
|
27
|
+
assert_equal("Ciao a tutti", Translate.t("Hello world", nil, "ITALIAN"));
|
28
|
+
assert_equal("こんにちは、世界", Translate.t("Hello world", nil, "JAPANESE"));
|
29
|
+
assert_equal("안녕하세요 세상", Translate.t("Hello world", nil, "KOREAN"));
|
30
|
+
assert_equal("Olá mundo", Translate.t("Hello world", nil, "PORTUGUESE"));
|
31
|
+
assert_equal("Привет мир", Translate.t("Hello world", nil, "RUSSIAN"));
|
32
|
+
assert_equal("¡Hola, mundo", Translate.t("Hello world", nil, "SPANISH"));
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_chinese_translate
|
36
|
+
assert_equal("Hello World", Translate.t("你好世界", "CHINESE", "ENGLISH"))
|
37
|
+
assert_equal("Hello World", Translate.t("你好世界", 'zh', 'en'))
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_unsupported_translate
|
41
|
+
assert_raise UnsupportedLanguagePair do
|
42
|
+
Translate::RTranslate.t("你好世界", 'zh', 'hz')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_translate_strings
|
47
|
+
assert_equal(["喂", "世界"], Translate::RTranslate.translate_strings(["Hello", "World"], "en", "zh-CN"))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_translate_string_to_languages
|
51
|
+
assert_equal(["世界您好", "ハローワールド"], Translate::RTranslate.translate_string_to_languages("Hello World", {:from => "en", :to => ["zh-CN", "ja"]}))
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_batch_translate
|
55
|
+
assert_equal(["世界您好", "ハローワールド"],
|
56
|
+
Translate::RTranslate.batch_translate([["Hello World", {:from => "en", :to => "zh-CN"}], ["Hello World", {:from => "en", :to => "ja"}]]))
|
57
|
+
end
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: opengotham-rtranslate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 1.3.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- opengotham
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-19 00:00:00 -04:00
|
18
|
+
default_executable: rtranslate
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: json
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 1
|
30
|
+
- 3
|
31
|
+
version: 1.1.3
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: shoulda
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: mocha
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :development
|
57
|
+
version_requirements: *id003
|
58
|
+
description: A simple, unofficial, ruby client API for using Google Translate.
|
59
|
+
email: mjording@openogotham.com
|
60
|
+
executables:
|
61
|
+
- rtranslate
|
62
|
+
extensions: []
|
63
|
+
|
64
|
+
extra_rdoc_files:
|
65
|
+
- README.txt
|
66
|
+
files:
|
67
|
+
- .gitignore
|
68
|
+
- History.txt
|
69
|
+
- MIT-LICENSE
|
70
|
+
- Manifest.txt
|
71
|
+
- README.txt
|
72
|
+
- Rakefile
|
73
|
+
- VERSION
|
74
|
+
- bin/rtranslate
|
75
|
+
- lib/rtranslate.rb
|
76
|
+
- lib/rtranslate/detection.rb
|
77
|
+
- lib/rtranslate/language.rb
|
78
|
+
- lib/rtranslate/rtranslate.rb
|
79
|
+
- rtranslate.gemspec
|
80
|
+
- tests/ts_detection.rb
|
81
|
+
- tests/ts_translate.rb
|
82
|
+
has_rdoc: true
|
83
|
+
homepage: http://github.com/opengotham/rtranslate
|
84
|
+
licenses: []
|
85
|
+
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options:
|
88
|
+
- --charset=UTF-8
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
segments:
|
96
|
+
- 0
|
97
|
+
version: "0"
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
105
|
+
requirements: []
|
106
|
+
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 1.3.6
|
109
|
+
signing_key:
|
110
|
+
specification_version: 3
|
111
|
+
summary: Google translate ruby client api
|
112
|
+
test_files: []
|
113
|
+
|