babelphish 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -8,6 +8,7 @@ bin/babelphish
8
8
  lib/babelphish.rb
9
9
  lib/babelphish/languages.rb
10
10
  lib/babelphish/translator.rb
11
+ lib/babelphish/exceptions.rb
11
12
  lib/tasks/babelphish.rake
12
13
  script/console
13
14
  script/destroy
data/README.rdoc CHANGED
@@ -16,6 +16,8 @@ Translate the en.yml file into all supported languages and overwrite other yml f
16
16
 
17
17
  == INSTALL:
18
18
 
19
+ ya2yaml should be automatically install, but in case they aren't:
20
+
19
21
  ya2yaml is required to properly write utf8 yaml files. Install it first.
20
22
 
21
23
  * sudo gem install ya2yaml
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ $hoe = Hoe.new('babelphish', Babelphish::VERSION) do |p|
10
10
  p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
11
11
  p.rubyforge_name = 'babelphish'
12
12
  p.url = "http://github.com/jbasdf/babelphish"
13
- p.summary = "Translate with Google like a fule"
13
+ p.summary = "Translate with Google like a fule => 'fool'"
14
14
  p.description = "Babelphish helps you make a quick translation of your application using Google Translate."
15
15
 
16
16
  p.extra_deps = [
@@ -31,3 +31,19 @@ Dir['tasks/**/*.rake'].each { |t| load t }
31
31
 
32
32
  # TODO - want other tests/tasks run by default? Add them to the list
33
33
  # task :default => [:spec, :features]
34
+
35
+ # TODO get rcov working
36
+ begin
37
+ require 'rcov/rcovtask'
38
+ Rcov::RcovTask.new do |t|
39
+ t.libs << 'lib'
40
+ t.pattern = 'test/*_test.rb'
41
+ t.verbose = true
42
+ # t.output_dir = 'coverage'
43
+ # t.rcov_opts << '--exclude "gems/*"'
44
+ end
45
+ rescue LoadError
46
+ task :rcov do
47
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
48
+ end
49
+ end
data/lib/babelphish.rb CHANGED
@@ -1,9 +1,42 @@
1
1
  $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
- module Babelphish
5
- VERSION = '0.1.5'
4
+ require 'yaml'
5
+ require 'cgi'
6
+ require 'json'
7
+ require 'net/http'
8
+
9
+ begin
10
+ require 'jcode'
11
+ rescue LoadError
12
+ begin
13
+ gem 'jcode'
14
+ rescue Gem::LoadError
15
+ puts "Please install the jcode gem"
16
+ end
17
+ end
6
18
 
19
+ begin
20
+ require 'ya2yaml'
21
+ rescue LoadError
22
+ begin
23
+ gem 'ya2yaml'
24
+ rescue Gem::LoadError
25
+ puts "Please install the ya2yaml gem"
26
+ end
27
+ end
28
+
29
+ require File.dirname(__FILE__) + '/../lib/babelphish/translator'
30
+ require File.dirname(__FILE__) + '/../lib/babelphish/languages'
31
+ require File.dirname(__FILE__) + '/../lib/babelphish/exceptions'
32
+
33
+ $KCODE = 'UTF8'
34
+
35
+ module Babelphish
36
+ VERSION = '0.1.7'
37
+ GOOGLE_AJAX_URL = "http://ajax.googleapis.com/ajax/services/language/"
38
+ MAX_RETRIES = 3
39
+
7
40
  def self.load_tasks
8
41
  if File.exists?('Rakefile')
9
42
  load 'Rakefile'
@@ -0,0 +1,5 @@
1
+ module Babelphish
2
+ module Exceptions
3
+ class GoogleResponseError < StandardError; end
4
+ end
5
+ end
@@ -1,51 +1,110 @@
1
+ # a list of supported languages is available here:
2
+ # http://code.google.com/apis/ajaxlanguage/documentation/reference.html#_intro_fonje
1
3
  module Babelphish
2
4
  module GoogleTranslate
3
5
 
4
- ARABIC = "ar"
5
- BULGARIAN = "bg"
6
- CATALAN = "ca"
7
- CHINESE = "zh"
8
- CHINESE_SIMPLIFIED = "zh-CN"
9
- CHINESE_TRADITIONAL = "zh-TW"
10
- CROATIAN = "cr"
11
- CZECH = "cs"
12
- DANISH = "da"
13
- DUTCH = "nl"
14
- ENGLISH = "en"
15
- FILIPINO = "tl"
16
- FINNISH = "fi"
17
- FRENCH = "fr"
18
- GERMAN = "de"
19
- GREEK = "el"
20
- HEBREW = "iw"
21
- HINDI = "hi"
22
- INDONESIAN = "id"
23
- ITALIAN = "it"
24
- JAPANESE = "ja"
25
- KOREAN = "ko"
26
- LATVIAN = "lv"
27
- LITHUANIAN = "lt"
28
- NORWEGIAN = "no"
29
- POLISH = "pl"
30
- PORTUGESE = "pt"
31
- ROMANIAN = "ro"
32
- RUSSIAN = "ru"
33
- SERBIAN = "sr"
34
- SLOVAK = "sk"
35
- SLOVENIAN = "sl"
36
- SPANISH = "es"
37
- SWEDISH = "sv"
38
- UKRANIAN = "uk"
39
- VIETNAMESE = "vi"
6
+ AFRIKAANS = 'af'
7
+ ALBANIAN = 'sq'
8
+ AMHARIC = 'am'
9
+ ARABIC = 'ar'
10
+ ARMENIAN = 'hy'
11
+ AZERBAIJANI = 'az'
12
+ BASQUE = 'eu'
13
+ BELARUSIAN = 'be'
14
+ BENGALI = 'bn'
15
+ BIHARI = 'bh'
16
+ BULGARIAN = 'bg'
17
+ BURMESE = 'my'
18
+ CATALAN = 'ca'
19
+ CHEROKEE = 'chr'
20
+ CHINESE = 'zh'
21
+ CHINESE_SIMPLIFIED = 'zh-CN'
22
+ CHINESE_TRADITIONAL = 'zh-TW'
23
+ CROATIAN = 'hr'
24
+ CZECH = 'cs'
25
+ DANISH = 'da'
26
+ DHIVEHI = 'dv'
27
+ DUTCH = 'nl'
28
+ ENGLISH = 'en'
29
+ ESPERANTO = 'eo'
30
+ ESTONIAN = 'et'
31
+ FILIPINO = 'tl'
32
+ FINNISH = 'fi'
33
+ FRENCH = 'fr'
34
+ GALICIAN = 'gl'
35
+ GEORGIAN = 'ka'
36
+ GERMAN = 'de'
37
+ GREEK = 'el'
38
+ GUARANI = 'gn'
39
+ GUJARATI = 'gu'
40
+ HEBREW = 'iw'
41
+ HINDI = 'hi'
42
+ HUNGARIAN = 'hu'
43
+ ICELANDIC = 'is'
44
+ INDONESIAN = 'id'
45
+ INUKTITUT = 'iu'
46
+ ITALIAN = 'it'
47
+ JAPANESE = 'ja'
48
+ KANNADA = 'kn'
49
+ KAZAKH = 'kk'
50
+ KHMER = 'km'
51
+ KOREAN = 'ko'
52
+ KURDISH = 'ku'
53
+ KYRGYZ = 'ky'
54
+ LAOTHIAN = 'lo'
55
+ LATVIAN = 'lv'
56
+ LITHUANIAN = 'lt'
57
+ MACEDONIAN = 'mk'
58
+ MALAY = 'ms'
59
+ MALAYALAM = 'ml'
60
+ MALTESE = 'mt'
61
+ MARATHI = 'mr'
62
+ MONGOLIAN = 'mn'
63
+ NEPALI = 'ne'
64
+ NORWEGIAN = 'no'
65
+ ORIYA = 'or'
66
+ PASHTO = 'ps'
67
+ PERSIAN = 'fa'
68
+ POLISH = 'pl'
69
+ PORTUGUESE = 'pt-PT'
70
+ PUNJABI = 'pa'
71
+ ROMANIAN = 'ro'
72
+ RUSSIAN = 'ru'
73
+ SANSKRIT = 'sa'
74
+ SERBIAN = 'sr'
75
+ SINDHI = 'sd'
76
+ SINHALESE = 'si'
77
+ SLOVAK = 'sk'
78
+ SLOVENIAN = 'sl'
79
+ SPANISH = 'es'
80
+ SWAHILI = 'sw'
81
+ SWEDISH = 'sv'
82
+ TAJIK = 'tg'
83
+ TAMIL = 'ta'
84
+ TAGALOG = 'tl'
85
+ TELUGU = 'te'
86
+ THAI = 'th'
87
+ TIBETAN = 'bo'
88
+ TURKISH = 'tr'
89
+ UKRAINIAN = 'uk'
90
+ URDU = 'ur'
91
+ UZBEK = 'uz'
92
+ UIGHUR = 'ug'
93
+ VIETNAMESE = 'vi'
40
94
 
41
- # LANGUAGES = [ARABIC, BULGARIAN, CATALAN, CHINESE, CHINESE_SIMPLIFIED,CHINESE_TRADITIONAL,
42
- # CROATIAN, CZECH, DANISH, DUTCH, ENGLISH, FILIPINO, FRENCH, GERMAN, GREEK, HEBREW,
43
- # ITALIAN, JAPANESE, KOREAN, LATVIAN, LITHUANIAN, NORWEGIAN, POLISH, PORTUGESE,
44
- # ROMANIAN, RUSSIAN, SERBIAN, SLOVAK, SLOVENIAN, SPANISH, SWEDISH, UKRANIAN, VIETNAMESE]
45
-
46
- LANGUAGES = [ARABIC, BULGARIAN, CATALAN, CHINESE, CHINESE_SIMPLIFIED,CHINESE_TRADITIONAL,
47
- CZECH, DANISH, DUTCH, ENGLISH, FILIPINO, FRENCH, GERMAN, GREEK, HEBREW,
48
- ITALIAN, JAPANESE, KOREAN, LATVIAN, LITHUANIAN, NORWEGIAN, POLISH, PORTUGESE,
49
- ROMANIAN, RUSSIAN, SERBIAN, SLOVAK, SLOVENIAN, SPANISH, SWEDISH, UKRANIAN, VIETNAMESE]
95
+ # all languages
96
+ # LANGUAGES = [AFRIKAANS,ALBANIAN,AMHARIC,ARABIC,ARMENIAN,AZERBAIJANI,BASQUE,BELARUSIAN,BENGALI,BIHARI,BULGARIAN,BURMESE,CATALAN,CHEROKEE,
97
+ # CHINESE,CHINESE_SIMPLIFIED,CHINESE_TRADITIONAL,CROATIAN,CZECH,DANISH,DHIVEHI,DUTCH,ENGLISH,ESPERANTO,ESTONIAN,FILIPINO,FINNISH,
98
+ # FRENCH,GALICIAN,GEORGIAN,GERMAN,GREEK,GUARANI,GUJARATI,HEBREW,HINDI,HUNGARIAN,ICELANDIC,INDONESIAN,INUKTITUT,ITALIAN,
99
+ # JAPANESE,KANNADA,KAZAKH,KHMER,KOREAN,KURDISH,KYRGYZ,LAOTHIAN,LATVIAN,LITHUANIAN,MACEDONIAN,MALAY,MALAYALAM,MALTESE,MARATHI,
100
+ # MONGOLIAN,NEPALI,NORWEGIAN,ORIYA,PASHTO,PERSIAN,POLISH,PORTUGUESE,PUNJABI,ROMANIAN,RUSSIAN,SANSKRIT,SERBIAN,SINDHI,SINHALESE,
101
+ # SLOVAK,SLOVENIAN,SPANISH,SWAHILI,SWEDISH,TAJIK,TAMIL,TAGALOG,TELUGU,THAI,TIBETAN,TURKISH,UKRAINIAN,URDU,UZBEK,UIGHUR,VIETNAMESE]
102
+
103
+ # Google doesn't support translations to all languages. These are the translations available. See:
104
+ # http://code.google.com/apis/ajaxlanguage/documentation/#SupportedPairs
105
+ LANGUAGES = [ALBANIAN, ARABIC, BULGARIAN, CATALAN, CHINESE, CHINESE_SIMPLIFIED,CHINESE_TRADITIONAL, CROATIAN,
106
+ CZECH, DANISH, DUTCH, ENGLISH, ESTONIAN, FILIPINO, FINNISH, FRENCH, GALICIAN, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN,
107
+ INDONESIAN, ITALIAN, JAPANESE, KOREAN, LATVIAN, LITHUANIAN, MALTESE, NORWEGIAN, PERSIAN, POLISH, PORTUGUESE,
108
+ ROMANIAN, RUSSIAN, SERBIAN, SLOVAK, SLOVENIAN, SPANISH, SWEDISH, THAI, TURKISH, UKRAINIAN, VIETNAMESE]
50
109
  end
51
110
  end
@@ -1,15 +1,10 @@
1
- require 'yaml'
2
- require 'ya2yaml'
3
- require 'babelphish/languages'
4
- require 'jcode'
5
-
6
1
  module Babelphish
7
2
  module Translator
3
+
8
4
  class << self
9
5
 
10
6
  def translate_yaml(yml, overwrite = false, translate_to = nil)
11
7
  @yml = yml
12
- $KCODE = 'UTF8'
13
8
  language = File.basename(yml, ".yml")
14
9
  if !Babelphish::GoogleTranslate::LANGUAGES.include?(language)
15
10
  STDERR.puts "#{language} is not one of the available languages. Please choose a standard localized yml file. i.e. en.yml."
@@ -20,25 +15,86 @@ module Babelphish
20
15
  translate_and_write_yml(yml, translate_to, language, overwrite)
21
16
  puts "Finished translating #{language} to #{translate_to}"
22
17
  else
23
- Babelphish::GoogleTranslate::LANGUAGES.each do |to|
24
- puts "Translating #{language} to #{to}"
25
- translate_and_write_yml(yml, to, language, overwrite)
26
- puts "Finished translating #{language} to #{to}"
27
- end
18
+ # Babelphish::GoogleTranslate::LANGUAGES.each do |to|
19
+ # puts "Translating #{language} to #{to}"
20
+ # translate_and_write_yml(yml, to, language, overwrite)
21
+ # puts "Finished translating #{language} to #{to}"
22
+ # end
23
+ tos = Babelphish::GoogleTranslate::LANGUAGES
24
+ translate_and_write_many_yml(yml, tos, language, overwrite)
25
+ end
26
+ end
27
+
28
+ def translate_and_write_many_yml(yml, tos, from, overwrite)
29
+ return unless File.exist?(yml)
30
+ source = YAML.load_file(yml)
31
+ translated_source = YAML.load_file(yml)
32
+ translate_many_keys(translated_source, tos, from)
33
+ # At this point translated_source contains a translation for every language. Cut it apart into individual hashes
34
+ tos.each do |to|
35
+ next if to == from # don't want to overwrite the source file
36
+ extracted_translation = {}
37
+ extract_translation(source, translated_source, extracted_translation, to)
38
+ # change the top level key from the source language to the destination language
39
+ translated_filename = File.join(File.dirname(yml), "#{to}.yml")
40
+ return if File.exist?(translated_filename) && !overwrite
41
+ extracted_translation[to] = extracted_translation[from]
42
+ extracted_translation.delete(from)
43
+ File.open(translated_filename, 'w') { |f| f.write(extracted_translation.ya2yaml) }
28
44
  end
29
45
  end
30
46
 
47
+ def extract_translation(source, translated_source, extracted, language)
48
+ source.each_key do |key|
49
+ if source[key].is_a?(Hash)
50
+ extracted[key] = {}
51
+ extract_translation(source[key], translated_source[key], extracted[key], language)
52
+ else
53
+ extracted[key] = translated_source[key][language]
54
+ end
55
+ end
56
+ end
57
+
58
+ def translate_many_keys(translate_hash, tos, from)
59
+ translate_hash.each_key do |key|
60
+ if translate_hash[key].is_a?(Hash)
61
+ translate_many_keys(translate_hash[key], tos, from)
62
+ else
63
+ if key == false
64
+ puts "Key #{key} was evaluated as false. Check your yml file and be sure it does not include values like no: No"
65
+ elsif key == true
66
+ puts "Key #{key} was evaluated as true. Check your yml file and be sure it does not include values like yes: Yes"
67
+ elsif !translate_hash[key].nil?
68
+ # pull out all the string substitutions so that google doesn't translate those
69
+ pattern = /\{\{.+\}\}/
70
+ holder = '{{---}}'
71
+ replacements = translate_hash[key].scan(pattern)
72
+ translate_hash[key].gsub!(pattern, holder)
73
+ translations = multiple_translate(translate_hash[key], tos, from)
74
+ translations.each_key do |locale|
75
+ replacements.each do |r|
76
+ translations[locale].sub!(holder, r)
77
+ end
78
+ end
79
+ translate_hash[key] = translations
80
+ else
81
+ puts "Key #{key} contains no data"
82
+ end
83
+ end
84
+ end
85
+ end
86
+
31
87
  def translate_and_write_yml(yml, to, from, overwrite)
32
88
  return if to == from
33
89
  return unless File.exist?(yml)
34
90
  translated_filename = File.join(File.dirname(yml), "#{to}.yml")
35
91
  return if File.exist?(translated_filename) && !overwrite
36
- translated_yml = YAML.load_file(yml)
37
- translate_keys(translated_yml, to, from)
92
+ source = YAML.load_file(yml)
93
+ translate_keys(source, to, from)
38
94
  # change the top level key from the source language to the destination language
39
- translated_yml[to] = translated_yml[from]
40
- translated_yml.delete(from)
41
- File.open(translated_filename, 'w') { |f| f.write(translated_yml.ya2yaml) }
95
+ source[to] = source[from]
96
+ source.delete(from)
97
+ File.open(translated_filename, 'w') { |f| f.write(source.ya2yaml) }
42
98
  end
43
99
 
44
100
  def translate_keys(translate_hash, to, from)
@@ -50,7 +106,7 @@ module Babelphish
50
106
  puts "Key #{key} was evaluated as false. Check your yml file and be sure to escape values like no with 'no'. ie 'no': 'No'"
51
107
  elsif key == true
52
108
  puts "Key #{key} was evaluated as true. Check your yml file and be sure to escape values like yes with 'yes'. ie 'yes': 'Yes'"
53
- elsif translate_hash[key]
109
+ elsif !translate_hash[key].nil?
54
110
  # pull out all the string substitutions so that google doesn't translate those
55
111
  pattern = /\{\{.+\}\}/
56
112
  holder = '{{---}}'
@@ -66,17 +122,12 @@ module Babelphish
66
122
  end
67
123
  end
68
124
  end
69
-
125
+
70
126
  # from: http://ruby.geraldbauer.ca/google-translation-api.html
71
- def translate(text, to, from = 'en')
127
+ def translate(text, to, from = 'en', tries = 0)
72
128
 
73
129
  return if to == from
74
-
75
- require 'cgi'
76
- require 'json'
77
- require 'net/http'
78
-
79
- base = 'http://ajax.googleapis.com/ajax/services/language/translate'
130
+ base = Babelphish::GOOGLE_AJAX_URL + 'translate'
80
131
  # assemble query params
81
132
  params = {
82
133
  :langpair => "#{from}|#{to}",
@@ -90,10 +141,83 @@ module Babelphish
90
141
  if json['responseStatus'] == 200
91
142
  json['responseData']['translatedText']
92
143
  else
93
- puts "A problem occured while translating from #{from} to #{to}. To retry only this translation try: babelphish -o -y #{@yml} -t #{to} to retry the translation. Response: #{response}"
144
+ if tries <= Babelphish::MAX_RETRIES
145
+ # Try again a few more times
146
+ translate(text, to, from, tries+=1)
147
+ else
148
+ puts "A problem occured while translating from #{from} to #{to}. "
149
+ puts "#{json['responseDetails']} "
150
+ puts "To retry only this translation try: 'babelphish -o -y #{@yml} -t #{to}' to retry the translation. Response: #{response}" if defined?(@yml)
151
+ raise Exceptions::GoogleResponseError, "#{json['responseDetails']}"
152
+ end
94
153
  end
95
154
  end
96
155
 
156
+ # translate from the 'from' language into all available languages
157
+
158
+ # multiple strings and multiple languages
159
+ #
160
+ # http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=hello%20world&langpair=en|it&q=goodbye&langpair=en|fr
161
+ # results from google look like this:
162
+ # {"responseData": [{"responseData":{"translatedText":"ciao mondo"},"responseDetails":null,"responseStatus":200},{"responseData":{"translatedText":"au revoir"},"responseDetails":null,"responseStatus":200}], "responseDetails": null, "responseStatus": 200}
163
+ #
164
+ # One string into multiple languages
165
+ # http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=hello%20world&langpair=en|it&langpair=en|fr
166
+ # results from google look like this:
167
+ # {"responseData": [{"responseData":{"translatedText":"ciao mondo"},"responseDetails":null,"responseStatus":200},{"responseData":{"translatedText":"Bonjour le Monde"},"responseDetails":null,"responseStatus":200}], "responseDetails": null, "responseStatus": 200}
168
+ #
169
+ def multiple_translate(text, tos, from = 'en', tries = 0)
170
+ base = Babelphish::GOOGLE_AJAX_URL + 'translate'
171
+ # assemble query params
172
+ params = {
173
+ :q => text,
174
+ :v => 1.0
175
+ }
176
+ query = params.map{ |k,v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
177
+
178
+ tos.each do |to|
179
+ query << "&langpair=" + CGI.escape("#{from}|#{to}")
180
+ end
181
+
182
+ response = Net::HTTP.get_response( URI.parse( "#{base}?#{query}" ) )
183
+ json = JSON.parse( response.body )
184
+
185
+ if json['responseStatus'] == 200
186
+ results = {}
187
+ json['responseData'].each_with_index do |data, index|
188
+ if data['responseStatus'] == 200
189
+ results[Babelphish::GoogleTranslate::LANGUAGES[index]] = data['responseData']['translatedText']
190
+ else
191
+ # retry the single translation
192
+ translate(text, Babelphish::GoogleTranslate::LANGUAGES[index], from)
193
+ end
194
+ end
195
+ results
196
+ else
197
+ if tries <= Babelphish::MAX_RETRIES
198
+ # Try again a few more times
199
+ multiple_translate(text, tos, from, tries+=1)
200
+ else
201
+ puts "A problem occured while translating. Response: #{response}"
202
+ end
203
+ end
204
+ end
205
+
206
+ # Sends a string to google to attempt to detect the language.
207
+ # Returns an array indicating success/fail and the resulting data from google in a hash:
208
+ # {"language"=>"en", "confidence"=>0.08594032, "isReliable"=>false}
209
+ def detect_language(text)
210
+ request = Babelphish::GOOGLE_AJAX_URL + "detect?v=1.0&q=" + CGI.escape(text)
211
+ # send get request
212
+ response = Net::HTTP.get_response( URI.parse( request ) )
213
+ json = JSON.parse( response.body )
214
+ [json['responseStatus'] == 200, json['responseData']]
215
+ end
216
+
217
+ def supported_languages
218
+ Babelphish::GoogleTranslate::LANGUAGES
219
+ end
220
+
97
221
  end
98
222
  end
99
223
  end
@@ -2,10 +2,64 @@ require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
3
  class TestBabelphish < Test::Unit::TestCase
4
4
 
5
- def setup
5
+ def test_translate
6
+ translation = Babelphish::Translator.translate('hello', 'es', 'en')
7
+ assert_equal 'hola', translation
6
8
  end
7
9
 
8
- def test_truth
9
- assert true
10
+ def test_run_each_language
11
+ Babelphish::GoogleTranslate::LANGUAGES.each do |language|
12
+ begin
13
+ translation = Babelphish::Translator.translate('hello', language)
14
+ rescue => ex
15
+ puts "There was a problem translating to #{language}: #{ex}"
16
+ end
17
+ end
10
18
  end
19
+
20
+ def test_multiple_translate
21
+ translations = Babelphish::Translator.multiple_translate('hello', Babelphish::GoogleTranslate::LANGUAGES, 'en')
22
+ assert_equal 'hola', translations[Babelphish::GoogleTranslate::SPANISH]
23
+ assert_equal 'hallo', translations[Babelphish::GoogleTranslate::GERMAN]
24
+ assert_equal 'ciao', translations[Babelphish::GoogleTranslate::ITALIAN]
25
+ assert_equal 'salut', translations[Babelphish::GoogleTranslate::ROMANIAN]
26
+ assert_equal 'こんにちは', translations[Babelphish::GoogleTranslate::JAPANESE]
27
+ end
28
+
29
+ def test_detect_language
30
+ success, result = Babelphish::Translator.detect_language('hello world')
31
+ assert success, "Failed to detect language"
32
+ assert_equal Babelphish::GoogleTranslate::ENGLISH, result['language']
33
+ end
34
+
35
+ def test_supported_languages
36
+ assert_equal Babelphish::Translator.supported_languages, Babelphish::GoogleTranslate::LANGUAGES
37
+ end
38
+
39
+ def test_single_yml_translation
40
+ overwrite = true
41
+ translate_to = 'es'
42
+ yml = File.join(File.dirname(__FILE__), 'translations', 'en.yml')
43
+ Babelphish::Translator.translate_yaml(yml, overwrite, translate_to)
44
+ translated_yml = File.join(File.dirname(__FILE__), 'translations', "#{translate_to}.yml")
45
+ translation = YAML.load_file(translated_yml)
46
+ assert translation['es']
47
+ assert translation['es']['babelphish']
48
+ assert_equal "Este es un nivel más bajo", translation['es']['babelphish']['more']['test_more']
49
+ assert_equal "Esto es una prueba de cadenas", translation['es']['babelphish']['test']
50
+ assert_equal "Esta es una cadena con la incorporación {{insert}}", translation['es']['babelphish']['test_embedded']
51
+ end
52
+
53
+ def test_multiple_yml_translation
54
+ overwrite = true
55
+ yml = File.join(File.dirname(__FILE__), 'translations', 'en.yml')
56
+ Babelphish::Translator.translate_yaml(yml, overwrite)
57
+ Babelphish::GoogleTranslate::LANGUAGES.each do |to|
58
+ translated_yml = File.join(File.dirname(__FILE__), 'translations', "#{to}.yml")
59
+ translation = YAML.load_file(translated_yml)
60
+ assert translation[to]
61
+ assert translation[to]['babelphish']['test_embedded'].include?("{{insert}}")
62
+ end
63
+ end
64
+
11
65
  end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,8 @@
1
+ $:.reject! { |e| e.include? 'TextMate' }
2
+ require 'rubygems'
3
+ require 'ruby-debug'
4
+ require 'redgreen' rescue LoadError
1
5
  require 'stringio'
2
6
  require 'test/unit'
3
7
  require File.dirname(__FILE__) + '/../lib/babelphish'
8
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: babelphish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Ball
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-18 00:00:00 -06:00
12
+ date: 2009-07-04 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -65,6 +65,7 @@ files:
65
65
  - lib/babelphish.rb
66
66
  - lib/babelphish/languages.rb
67
67
  - lib/babelphish/translator.rb
68
+ - lib/babelphish/exceptions.rb
68
69
  - lib/tasks/babelphish.rake
69
70
  - script/console
70
71
  - script/destroy
@@ -97,7 +98,7 @@ rubyforge_project: babelphish
97
98
  rubygems_version: 1.3.1
98
99
  signing_key:
99
100
  specification_version: 2
100
- summary: Translate with Google like a fule
101
+ summary: Translate with Google like a fule => 'fool'
101
102
  test_files:
102
103
  - test/test_babelphish.rb
103
104
  - test/test_helper.rb