artforge-rtranslate 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ .svn
2
+ **/.svn
3
+ **/**/.svn
4
+ pkg
5
+ *.gem
@@ -0,0 +1,22 @@
1
+ V1.3.1 Jul 2nd, 2010
2
+ * Enable optional use of post request method, this solves the problem that some foreign character set create too large a string for a get request.
3
+
4
+ V1.3 Dec 18th, 2009
5
+ * 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.
6
+
7
+ V1.2 Sep 17th, 2009
8
+ * Enable the auto-detect source features of google translate api
9
+
10
+ V1.1 July 11th, 2009
11
+ * Add Google AJAX Language Dection support
12
+
13
+ v1.0 Dec 16th, 2008
14
+ * using the Google AJAX Language API instead of scrape
15
+ * add the batch translation support
16
+ * refactor the whole project
17
+
18
+ v0.2 Nov 16, 2007
19
+ * add a command line tool.
20
+
21
+ v0.1 Nov 15, 2007
22
+ * initial release
@@ -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.
@@ -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
@@ -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
@@ -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 = 'artforge-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 = "adam@artforge.com"
14
+ g.homepage = "http://github.com/Artforge/rtranslate"
15
+ g.authors = ["shisen","opengotham","Artforge"]
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.2
@@ -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
@@ -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, options ={})
22
+ RTranslate.translate(text, from, to, options)
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,124 @@
1
+ module Google
2
+ module Language
3
+ Languages = {
4
+ "lo"=>"LAOTHIAN",
5
+ "ta"=>"TAMIL",
6
+ "eu"=>"BASQUE",
7
+ "iw"=>"HEBREW",
8
+ "my"=>"BURMESE",
9
+ "uk"=>"UKRAINIAN",
10
+ "sk"=>"SLOVAK",
11
+ "ky"=>"KYRGYZ",
12
+ "zh-TW"=>"CHINESE_TRADITIONAL",
13
+ "pa"=>"PUNJABI",
14
+ "sl"=>"SLOVENIAN",
15
+ "ps"=>"PASHTO",
16
+ "ru"=>"RUSSIAN",
17
+ "mk"=>"MACEDONIAN",
18
+ "zh"=>"CHINESE",
19
+ "te"=>"TELUGU",
20
+ "bn"=>"BENGALI",
21
+ "cy"=>"WELSH",
22
+ "hr"=>"CROATIAN",
23
+ "ml"=>"MALAYALAM",
24
+ "lt"=>"LITHUANIAN",
25
+ "bo"=>"TIBETAN",
26
+ "ja"=>"JAPANESE",
27
+ "tg"=>"TAJIK",
28
+ "af"=>"AFRIKAANS",
29
+ "fr"=>"FRENCH",
30
+ "kk"=>"KAZAKH",
31
+ "th"=>"THAI",
32
+ "sq"=>"ALBANIAN",
33
+ "fa"=>"PERSIAN",
34
+ "lv"=>"LATVIAN",
35
+ "vi"=>"VIETNAMESE",
36
+ "ur"=>"URDU",
37
+ "az"=>"AZERBAIJANI",
38
+ "ne"=>"NEPALI",
39
+ "km"=>"KHMER",
40
+ "da"=>"DANISH",
41
+ "sr"=>"SERBIAN",
42
+ "hu"=>"HUNGARIAN",
43
+ "mn"=>"MONGOLIAN",
44
+ "gl"=>"GALICIAN",
45
+ "kn"=>"KANNADA",
46
+ "el"=>"GREEK",
47
+ "ko"=>"KOREAN",
48
+ "sa"=>"SANSKRIT",
49
+ "zh-CN"=>"CHINESE_SIMPLIFIED",
50
+ "gn"=>"GUARANI",
51
+ "dv"=>"DHIVEHI",
52
+ "or"=>"ORIYA",
53
+ "tl"=>"TAGALOG",
54
+ "chr"=>"CHEROKEE",
55
+ "en"=>"ENGLISH",
56
+ "hy"=>"ARMENIAN",
57
+ "mr"=>"MARATHI",
58
+ "sv"=>"SWEDISH",
59
+ "ms"=>"MALAY",
60
+ "am"=>"AMHARIC",
61
+ "eo"=>"ESPERANTO",
62
+ "sd"=>"SINDHI",
63
+ "pl"=>"POLISH",
64
+ "de"=>"GERMAN",
65
+ "be"=>"BELARUSIAN",
66
+ "nl"=>"DUTCH",
67
+ "mt"=>"MALTESE",
68
+ "sw"=>"SWAHILI",
69
+ "ka"=>"GEORGIAN",
70
+ "is"=>"ICELANDIC",
71
+ "ro"=>"ROMANIAN",
72
+ "ug"=>"UIGHUR",
73
+ "yi"=>"YIDDISH",
74
+ "hi"=>"HINDI",
75
+ "fi"=>"FINNISH",
76
+ "ku"=>"KURDISH",
77
+ "pt-PT"=>"PORTUGUESE",
78
+ "bg"=>"BULGARIAN",
79
+ "uz"=>"UZBEK",
80
+ "ga"=>"IRISH",
81
+ "it"=>"ITALIAN",
82
+ "tr"=>"TURKISH",
83
+ "bh"=>"BIHARI",
84
+ "es"=>"SPANISH",
85
+ "iu"=>"INUKTITUT",
86
+ "si"=>"SINHALESE",
87
+ "no"=>"NORWEGIAN",
88
+ "ca"=>"CATALAN",
89
+ "id"=>"INDONESIAN",
90
+ "ar"=>"ARABIC",
91
+ "cs"=>"CZECH",
92
+ "et"=>"ESTONIAN",
93
+ "gu"=>"GUJARATI"}
94
+
95
+ # judge whether the language is supported by google translate
96
+ def supported?(language)
97
+ if Languages.key?(language) || Languages.value?(language.upcase)
98
+ true
99
+ else
100
+ false
101
+ end
102
+ end
103
+ module_function :supported?
104
+
105
+ # get the abbrev of the language
106
+ def abbrev(language)
107
+ if supported?(language)
108
+ if Languages.key?(language)
109
+ language
110
+ else
111
+ language.upcase!
112
+ Languages.each do |k,v|
113
+ if v == language
114
+ return k
115
+ end
116
+ end
117
+ end
118
+ else
119
+ nil
120
+ end
121
+ end
122
+ module_function :abbrev
123
+ end
124
+ end
@@ -0,0 +1,184 @@
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
+ require 'net/http'
14
+
15
+ # Google AJAX Language REST Service URL
16
+ GOOGLE_TRANSLATE_URL = "http://ajax.googleapis.com/ajax/services/language/translate"
17
+
18
+ # Default version of Google AJAX Language API
19
+ DEFAULT_VERSION = "1.0"
20
+
21
+ attr_accessor :version, :key
22
+ attr_reader :default_from, :default_to
23
+
24
+ class << self
25
+ def translate(text, from, to, options = {})
26
+ if options[:method] == :post
27
+ RTranslate.new.post_translate(text, { :from => from, :to => to })
28
+ else
29
+ RTranslate.new.translate(text, { :from => from, :to => to })
30
+ end
31
+ end
32
+ alias_method :t, :translate
33
+
34
+ def translate_strings(text_array, from, to, options = {})
35
+ method = options[:method] || :get
36
+ RTranslate.new.translate_strings(text_array, {:from => from, :to => to, :method => method})
37
+ end
38
+
39
+ def translate_string_to_languages(text, options)
40
+ RTranslate.new.translate_string_to_languages(text, options)
41
+ end
42
+
43
+ def batch_translate(translate_options, options = {})
44
+ RTranslate.new.batch_translate(translate_options, options)
45
+ end
46
+ end
47
+
48
+ def initialize(version = DEFAULT_VERSION, key = nil, default_from = nil, default_to = nil)
49
+ @version = version
50
+ @key = key
51
+ @default_from = default_from
52
+ @default_to = default_to
53
+
54
+ if @default_from && !(Google::Lanauage.supported?(@default_from))
55
+ raise StandardError, "Unsupported source language '#{@default_from}'"
56
+ end
57
+
58
+ if @default_to && !(Google::Lanauage.supported?(@default_to))
59
+ raise StandardError, "Unsupported destination language '#{@default_to}'"
60
+ end
61
+ end
62
+
63
+ # translate the string from a source language to a target language.
64
+ #
65
+ # Configuration options:
66
+ # * <tt>:from</tt> - The source language
67
+ # * <tt>:to</tt> - The target language
68
+ def translate(text, options = { })
69
+ from = options[:from] || @default_from
70
+ to = options[:to] || @default_to
71
+ if (from.nil? || Google::Language.supported?(from)) && Google::Language.supported?(to)
72
+ from = from ? Google::Language.abbrev(from) : nil
73
+ to = Google::Language.abbrev(to)
74
+ langpair = "#{from}|#{to}"
75
+
76
+ text.mb_chars.scan(/(.{1,500})/).inject("") do |result, st|
77
+ url = "#{GOOGLE_TRANSLATE_URL}?q=#{st}&langpair=#{langpair}&v=#{@version}"
78
+ if @key
79
+ url << "&key=#{@key}"
80
+ end
81
+ result += do_translate(url)
82
+ end
83
+ else
84
+ raise UnsupportedLanguagePair, "Translation from '#{from}' to '#{to}' isn't supported yet!"
85
+ end
86
+ end
87
+
88
+ # This one for a POST request
89
+ def post_translate(text, options = { })
90
+ from = options[:from] || @default_from
91
+ to = options[:to] || @default_to
92
+ if (from.nil? || Google::Language.supported?(from)) && Google::Language.supported?(to)
93
+ from = from ? Google::Language.abbrev(from) : nil
94
+ to = Google::Language.abbrev(to)
95
+ post_options = {:langpair => "#{from}|#{to}", :v => @version}
96
+ post_options[:key] = @key if @key
97
+
98
+ text.mb_chars.scan(/(.{1,500})/).inject("") do |result, st|
99
+ url = GOOGLE_TRANSLATE_URL
100
+ post_options[:q] = st
101
+ result += do_post_translate(url,post_options)
102
+ end
103
+ else
104
+ raise UnsupportedLanguagePair, "Translation from '#{from}' to '#{to}' isn't supported yet!"
105
+ end
106
+ end
107
+
108
+ # translate several strings, all from the same source language to the same target language.
109
+ #
110
+ # Configuration options
111
+ # * <tt>:from</tt> - The source language
112
+ # * <tt>:to</tt> - The target language
113
+ def translate_strings(text_array, options = { })
114
+ text_array.collect do |text|
115
+ if options[:method] == :post
116
+ self.post_translate(text, options)
117
+ else
118
+ self.translate(text, options)
119
+ end
120
+ end
121
+ end
122
+
123
+ # Translate one string into several languages.
124
+ #
125
+ # Configuration options
126
+ # * <tt>:from</tt> - The source language
127
+ # * <tt>:to</tt> - The target language list
128
+ # Example:
129
+ #
130
+ # translate_string_to_languages("China", {:from => "en", :to => ["zh-CN", "zh-TW"]})
131
+ def translate_string_to_languages(text, options)
132
+ options[:to].collect do |to|
133
+ if options[:method] == :post
134
+ self.post_translate(text, { :from => options[:from], :to => to })
135
+ else
136
+ self.translate(text, { :from => options[:from], :to => to })
137
+ end
138
+ end
139
+ end
140
+
141
+ # Translate several strings, each into a different language.
142
+ #
143
+ # Examples:
144
+ #
145
+ # batch_translate([["China", {:from => "en", :to => "zh-CN"}], ["Chinese", {:from => "en", :to => "zh-CN"}]])
146
+ def batch_translate(translate_options, options = {})
147
+ translate_options.collect do |text, option|
148
+ if options[:method] == :post
149
+ self.post_translate(text, option)
150
+ else
151
+ self.translate(text, option)
152
+ end
153
+ end
154
+ end
155
+
156
+ private
157
+
158
+ def do_translate(url) #:nodoc:
159
+ jsondoc = open(URI.escape(url)).read
160
+ response = JSON.parse(jsondoc)
161
+ if response["responseStatus"] == 200
162
+ response["responseData"]["translatedText"]
163
+ else
164
+ raise StandardError, response["responseDetails"]
165
+ end
166
+ rescue Exception => e
167
+ raise StandardError, e.message
168
+ end
169
+
170
+ def do_post_translate(url, options = {}) #:nodoc:
171
+ jsondoc = Net::HTTP.post_form(URI.parse(url),options).body
172
+ response = JSON.parse(jsondoc)
173
+
174
+ if response["responseStatus"] == 200
175
+ response["responseData"]["translatedText"]
176
+ else
177
+ raise StandardError, response["responseDetails"]
178
+ end
179
+ rescue Exception => e
180
+ raise StandardError, e.message
181
+ end
182
+
183
+ end
184
+ 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,75 @@
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
+
10
+ def test_english_translate
11
+ assert_equal("مرحبا العالم", Translate.t("Hello world", "ENGLISH", "ARABIC"));
12
+ assert_equal("您好世界", Translate.t("Hello world", "ENGLISH", "CHINESE_SIMPLIFIED"));
13
+ assert_equal("Bonjour tout le monde", Translate.t("Hello world", "ENGLISH", "FRENCH"));
14
+ assert_equal("Hallo Welt", Translate.t("Hello world", "ENGLISH", "GERMAN"));
15
+ assert_equal("Ciao a tutti", Translate.t("Hello world", "ENGLISH", "ITALIAN"));
16
+ assert_equal("こんにちは、世界", Translate.t("Hello world", "ENGLISH", "JAPANESE"));
17
+ assert_equal("안녕하세요 세상", Translate.t("Hello world", "ENGLISH", "KOREAN"));
18
+ assert_equal("Olá mundo", Translate.t("Hello world", "ENGLISH", "PORTUGUESE"));
19
+ assert_equal("Привет мир", Translate.t("Hello world", "ENGLISH", "RUSSIAN"));
20
+ assert_equal("¡Hola, mundo", Translate.t("Hello world", "ENGLISH", "SPANISH"));
21
+ end
22
+
23
+ def test_auto_detect_translate
24
+ assert_equal("مرحبا العالم", Translate.t("Hello world", nil, "ARABIC"));
25
+ assert_equal("您好世界", Translate.t("Hello world", nil, "CHINESE_SIMPLIFIED"));
26
+ assert_equal("Bonjour tout le monde", Translate.t("Hello world", nil, "FRENCH"));
27
+ assert_equal("Hallo Welt", Translate.t("Hello world", nil, "GERMAN"));
28
+ assert_equal("Ciao a tutti", Translate.t("Hello world", nil, "ITALIAN"));
29
+ assert_equal("こんにちは、世界", Translate.t("Hello world", nil, "JAPANESE"));
30
+ assert_equal("안녕하세요 세상", Translate.t("Hello world", nil, "KOREAN"));
31
+ assert_equal("Olá mundo", Translate.t("Hello world", nil, "PORTUGUESE"));
32
+ assert_equal("Привет мир", Translate.t("Hello world", nil, "RUSSIAN"));
33
+ assert_equal("¡Hola, mundo", Translate.t("Hello world", nil, "SPANISH"));
34
+ end
35
+
36
+ def test_chinese_translate
37
+ assert_equal("Hello World", Translate.t("您好世界", "CHINESE", "ENGLISH"))
38
+ assert_equal("Hello World", Translate.t("您好世界", 'zh', 'en'))
39
+ end
40
+
41
+ def test_unsupported_translate
42
+ assert_raise UnsupportedLanguagePair do
43
+ Translate::RTranslate.t("您好世界", 'zh', 'hz')
44
+ end
45
+ end
46
+
47
+ def test_translate_strings
48
+ assert_equal(["你好", "世界"], Translate::RTranslate.translate_strings(["Hello", "World"], "en", "zh-CN"))
49
+ end
50
+
51
+ def test_translate_string_to_languages
52
+ assert_equal(["您好世界", "ハローワールド"], Translate::RTranslate.translate_string_to_languages("Hello World", {:from => "en", :to => ["zh-CN", "ja"]}))
53
+ end
54
+
55
+ def test_batch_translate
56
+ assert_equal(["您好世界", "ハローワールド"],
57
+ Translate::RTranslate.batch_translate([["Hello World", {:from => "en", :to => "zh-CN"}], ["Hello World", {:from => "en", :to => "ja"}]]))
58
+ end
59
+
60
+ def test_post_translate
61
+ # Basic
62
+ assert_equal("مرحبا العالم", Translate.t("Hello world", "ENGLISH", "ARABIC", {:method => :post}));
63
+ # Auto Detect Language
64
+ assert_equal("您好世界", Translate.t("Hello world", nil, "CHINESE_SIMPLIFIED", {:method => :post}));
65
+ #Chinese
66
+ assert_equal("Hello World", Translate.t("您好世界", "CHINESE", "ENGLISH", {:method => :post}))
67
+ #Strings
68
+ assert_equal(["你好", "世界"], Translate::RTranslate.translate_strings(["Hello", "World"], "en", "zh-CN", {:method => :post}))
69
+ # String to Languages
70
+ assert_equal(["您好世界", "ハローワールド"], Translate::RTranslate.translate_string_to_languages("Hello World", {:from => "en", :to => ["zh-CN", "ja"], :method => :post}))
71
+ # Batch
72
+ assert_equal(["您好世界", "ハローワールド"],
73
+ Translate::RTranslate.batch_translate([["Hello World", {:from => "en", :to => "zh-CN"}], ["Hello World", {:from => "en", :to => "ja"}]], {:method => :post}))
74
+ end
75
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: artforge-rtranslate
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 3
9
+ - 2
10
+ version: 1.3.2
11
+ platform: ruby
12
+ authors:
13
+ - shisen
14
+ - opengotham
15
+ - Artforge
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2010-07-02 00:00:00 -04:00
21
+ default_executable: rtranslate
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ name: json
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ hash: 21
32
+ segments:
33
+ - 1
34
+ - 1
35
+ - 3
36
+ version: 1.1.3
37
+ type: :runtime
38
+ version_requirements: *id001
39
+ - !ruby/object:Gem::Dependency
40
+ name: shoulda
41
+ prerelease: false
42
+ requirement: &id002 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ hash: 3
48
+ segments:
49
+ - 0
50
+ version: "0"
51
+ type: :development
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: mocha
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ type: :development
66
+ version_requirements: *id003
67
+ description: A simple, unofficial, ruby client API for using Google Translate.
68
+ email: adam@artforge.com
69
+ executables:
70
+ - rtranslate
71
+ extensions: []
72
+
73
+ extra_rdoc_files:
74
+ - README.txt
75
+ files:
76
+ - .gitignore
77
+ - History.txt
78
+ - MIT-LICENSE
79
+ - Manifest.txt
80
+ - README.txt
81
+ - Rakefile
82
+ - VERSION
83
+ - bin/rtranslate
84
+ - lib/rtranslate.rb
85
+ - lib/rtranslate/detection.rb
86
+ - lib/rtranslate/language.rb
87
+ - lib/rtranslate/rtranslate.rb
88
+ - tests/ts_detection.rb
89
+ - tests/ts_translate.rb
90
+ has_rdoc: true
91
+ homepage: http://github.com/Artforge/rtranslate
92
+ licenses: []
93
+
94
+ post_install_message:
95
+ rdoc_options:
96
+ - --charset=UTF-8
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ requirements: []
118
+
119
+ rubyforge_project:
120
+ rubygems_version: 1.3.7
121
+ signing_key:
122
+ specification_version: 3
123
+ summary: Google translate ruby client api
124
+ test_files: []
125
+