goobalize3 0.1.1 → 0.2.0
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/README.rdoc +11 -3
- data/Rakefile +1 -8
- data/lib/bing_translate.rb +46 -0
- data/lib/goobalize3.rb +8 -2
- data/lib/goobalize3/version.rb +1 -1
- data/lib/goobalize_translate_error.rb +1 -0
- data/lib/google_translate.rb +23 -12
- metadata +31 -53
data/README.rdoc
CHANGED
@@ -5,6 +5,8 @@ Goobalize3 (Google + Globalize3) is useful to auto translate the attributes of y
|
|
5
5
|
If you have a model with some attributes translated with {Globalize3}[https://github.com/svenfuchs/globalize3] you
|
6
6
|
can in easy way auto translate them via {Google Translate}[http://translate.google.com].
|
7
7
|
|
8
|
+
With version 0.2.0 Goobalize use Bing to translate because Google Translate service is no more free.
|
9
|
+
|
8
10
|
== Requirements
|
9
11
|
|
10
12
|
* Globalize3
|
@@ -14,11 +16,12 @@ can in easy way auto translate them via {Google Translate}[http://translate.goog
|
|
14
16
|
* As gem: put <tt>gem 'goobalize3'</tt> in your Gemfile
|
15
17
|
* As plugin: run <tt>rails plugin install git@github.com:pioz/goobalize3.git</tt>
|
16
18
|
|
17
|
-
Now create <tt>
|
19
|
+
Now create <tt>goobalize.yml</tt> file in your rails config folder and put the follow line:
|
18
20
|
|
19
|
-
|
21
|
+
bing_app_id: YOUR_BING_APP_ID
|
22
|
+
google_api : YOUR_GOOGLE_TRANSLATE_API_KEY
|
20
23
|
|
21
|
-
You can get api key at {Google apis console page}[https://code.google.com/apis/console/].
|
24
|
+
You can get Google api key at {Google apis console page}[https://code.google.com/apis/console/].
|
22
25
|
|
23
26
|
== Usage
|
24
27
|
|
@@ -32,6 +35,11 @@ You can set also the target locales
|
|
32
35
|
|
33
36
|
@post.translate(:it, :en, :de)
|
34
37
|
|
38
|
+
The default service is *Bing*. To use Google Translate set:
|
39
|
+
|
40
|
+
GOOBALIZE_SERVICE = :google
|
41
|
+
|
42
|
+
|
35
43
|
== Questions or problems?
|
36
44
|
|
37
45
|
If you have any issues with Goobalize3 please add an {issue on GitHub}[https://github.com/pioz/goobalize3/issues]
|
data/Rakefile
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
module BingTranslate
|
2
|
+
require 'net/http'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
URI = URI.parse('http://api.microsofttranslator.com/V2/Http.svc/Translate')
|
6
|
+
QUERY_LIMIT = 2000000
|
7
|
+
LOCALES_MAP = {
|
8
|
+
:cn => :'zh-CNT'
|
9
|
+
}
|
10
|
+
|
11
|
+
def self.get_api
|
12
|
+
config_file = "#{Rails.root}/config/goobalize.yml"
|
13
|
+
#config_file = File.expand_path('../bing_translate.yml', __FILE__)
|
14
|
+
if File.exists?(config_file)
|
15
|
+
@@bing_translate_api = YAML.load_file(config_file)['bing_app_id']
|
16
|
+
raise GoobalizeTranslateError.new("No APP ID found in '#{config_file}'") if @@bing_translate_api.blank?
|
17
|
+
return @@bing_translate_api
|
18
|
+
else
|
19
|
+
raise GoobalizeTranslateException.new("No config file found '#{config_file}'")
|
20
|
+
end
|
21
|
+
return nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.map(locale)
|
25
|
+
mapped = LOCALES_MAP[locale]
|
26
|
+
mapped.nil? ? locale : mapped
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.perform(params)
|
30
|
+
@@bing_translate_api ||= get_api
|
31
|
+
query = {}
|
32
|
+
query[:text] = CGI::escape(params[:q].to_s[0..QUERY_LIMIT])
|
33
|
+
query[:from] = map params[:source]
|
34
|
+
query[:to] = map params[:target]
|
35
|
+
query.merge!(:appId => @@bing_translate_api, :contentType => 'text/html', :category => 'general')
|
36
|
+
data = []
|
37
|
+
query.each_pair { |k,v| data << "#{k}=#{v}" }
|
38
|
+
query_string = data.join('&')
|
39
|
+
result = Net::HTTP.new(URI.host, URI.port).get("#{URI.path}?#{query_string}")
|
40
|
+
begin
|
41
|
+
Nokogiri.parse(result.body).xpath('//xmlns:string').first.content
|
42
|
+
rescue
|
43
|
+
raise GoobalizeTranslateError.new('Translation failed')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/goobalize3.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Goobalize3
|
2
|
+
require File.expand_path('../goobalize_translate_error', __FILE__)
|
2
3
|
require File.expand_path('../google_translate', __FILE__)
|
4
|
+
require File.expand_path( '../bing_translate', __FILE__)
|
3
5
|
|
4
6
|
def translate(*args)
|
5
7
|
if self.class.translates?
|
@@ -11,8 +13,12 @@ module Goobalize3
|
|
11
13
|
autotranslated_attributes = {}
|
12
14
|
self.class.translated_attribute_names.each do |attr_name|
|
13
15
|
begin
|
14
|
-
|
15
|
-
|
16
|
+
if defined?(GOOBALIZE_SERVICE) && GOOBALIZE_SERVICE.to_sym == :google
|
17
|
+
autotranslated_attributes[attr_name] = GoogleTranslate.perform(:source => cur_locale, :target => locale, :q => self.send(attr_name, cur_locale))
|
18
|
+
else
|
19
|
+
autotranslated_attributes[attr_name] = BingTranslate.perform(:source => cur_locale, :target => locale, :q => self.send(attr_name, cur_locale))
|
20
|
+
end
|
21
|
+
rescue GoobalizeTranslateError => e
|
16
22
|
Rails.logger.error(e.to_s)
|
17
23
|
end
|
18
24
|
end
|
data/lib/goobalize3/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
class GoobalizeTranslateError < StandardError; end
|
data/lib/google_translate.rb
CHANGED
@@ -10,14 +10,14 @@ module GoogleTranslate
|
|
10
10
|
}
|
11
11
|
|
12
12
|
def self.get_api
|
13
|
-
config_file = "#{Rails.root}/config/
|
13
|
+
config_file = "#{Rails.root}/config/goobalize.yml"
|
14
14
|
#config_file = File.expand_path('../google_translate.yml', __FILE__)
|
15
15
|
if File.exists?(config_file)
|
16
|
-
@@goole_translate_api = YAML.load_file(config_file)['
|
17
|
-
raise
|
16
|
+
@@goole_translate_api = YAML.load_file(config_file)['google_api']
|
17
|
+
raise GoobalizeTranslateError.new("No API key found in '#{config_file}'") if @@goole_translate_api.blank?
|
18
18
|
return @@goole_translate_api
|
19
19
|
else
|
20
|
-
raise
|
20
|
+
raise GoobalizeTranslateError.new("No config file found '#{config_file}'")
|
21
21
|
end
|
22
22
|
return nil
|
23
23
|
end
|
@@ -40,15 +40,26 @@ module GoogleTranslate
|
|
40
40
|
http.use_ssl = true
|
41
41
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
42
42
|
response, data = http.post(SERVICE, query_string, 'X-HTTP-Method-Override' => 'GET')
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
if response.code == 200
|
44
|
+
json = JSON.parse(data)
|
45
|
+
if json['data'] && json['data']['translations'] && json['data']['translations'].first['translatedText']
|
46
|
+
return CGI::unescapeHTML(json['data']['translations'].first['translatedText'])
|
47
|
+
else
|
48
|
+
raise GoobalizeTranslateError.new(error(json))
|
49
|
+
end
|
48
50
|
else
|
49
|
-
|
51
|
+
json = JSON.parse(response.body)
|
52
|
+
raise GoobalizeTranslateError.new(error(json))
|
50
53
|
end
|
51
54
|
end
|
52
|
-
end
|
53
55
|
|
54
|
-
|
56
|
+
private
|
57
|
+
|
58
|
+
def error(json)
|
59
|
+
if json['error'] && json['error']['errors'] && json['error']['errors'].first['message']
|
60
|
+
return json['error']['errors'].first['message']
|
61
|
+
else
|
62
|
+
return 'Unknown error'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
metadata
CHANGED
@@ -1,89 +1,67 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: goobalize3
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 1
|
10
|
-
version: 0.1.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Enrico Pilotto
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: globalize3
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70138247307220 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :runtime
|
34
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70138247307220
|
35
25
|
description: Auto translate with Google Translate the Globalize3 attributes
|
36
|
-
email:
|
26
|
+
email:
|
37
27
|
- enrico@megiston.it
|
38
28
|
executables: []
|
39
|
-
|
40
29
|
extensions: []
|
41
|
-
|
42
30
|
extra_rdoc_files: []
|
43
|
-
|
44
|
-
files:
|
31
|
+
files:
|
45
32
|
- .gitignore
|
46
33
|
- Gemfile
|
47
34
|
- README.rdoc
|
48
35
|
- Rakefile
|
49
36
|
- goobalize3.gemspec
|
50
37
|
- init.rb
|
38
|
+
- lib/bing_translate.rb
|
51
39
|
- lib/goobalize3.rb
|
52
40
|
- lib/goobalize3/version.rb
|
41
|
+
- lib/goobalize_translate_error.rb
|
53
42
|
- lib/google_translate.rb
|
54
|
-
|
55
|
-
homepage: ""
|
43
|
+
homepage: ''
|
56
44
|
licenses: []
|
57
|
-
|
58
45
|
post_install_message:
|
59
46
|
rdoc_options: []
|
60
|
-
|
61
|
-
require_paths:
|
47
|
+
require_paths:
|
62
48
|
- lib
|
63
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
50
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
|
70
|
-
- 0
|
71
|
-
version: "0"
|
72
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
56
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
segments:
|
79
|
-
- 0
|
80
|
-
version: "0"
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
81
61
|
requirements: []
|
82
|
-
|
83
62
|
rubyforge_project: goobalize3
|
84
|
-
rubygems_version: 1.
|
63
|
+
rubygems_version: 1.8.10
|
85
64
|
signing_key:
|
86
65
|
specification_version: 3
|
87
66
|
summary: Auto translate with Google Translate the Globalize3 attributes
|
88
67
|
test_files: []
|
89
|
-
|