goobalize3 0.0.1
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/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README.rdoc +41 -0
- data/Rakefile +9 -0
- data/goobalize3.gemspec +23 -0
- data/init.rb +1 -0
- data/lib/goobalize3.rb +27 -0
- data/lib/goobalize3/version.rb +3 -0
- data/lib/google_translate.rb +42 -0
- metadata +85 -0
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
= Goobalize3
|
2
|
+
|
3
|
+
Goobalize3 (Google + Globalize3) is useful to auto translate the attributes of your activerecord models.
|
4
|
+
|
5
|
+
If you have a model with some attributes translated with {Globalize3}[https://github.com/svenfuchs/globalize3] you
|
6
|
+
can in easy way auto translate them via {Google Translate}[http://translate.google.com].
|
7
|
+
|
8
|
+
== Installation
|
9
|
+
|
10
|
+
As gem
|
11
|
+
|
12
|
+
gem install goobalize3
|
13
|
+
|
14
|
+
As plugin
|
15
|
+
|
16
|
+
rails plugin install git@github.com:pioz/goobalize3.git
|
17
|
+
|
18
|
+
== Requirements
|
19
|
+
|
20
|
+
* Globalize3
|
21
|
+
|
22
|
+
== Usage
|
23
|
+
|
24
|
+
You can auto translate all globalized attributes of an activerecord object with
|
25
|
+
|
26
|
+
@post.translate
|
27
|
+
|
28
|
+
this translate the attributes from current set locale (<tt>I18n.locale</tt>) to all available locales (<tt>I18n.available_locales - I18n.locale</tt>).
|
29
|
+
|
30
|
+
You can set also the target locales
|
31
|
+
|
32
|
+
@post.translate(:it, :en, :de)
|
33
|
+
|
34
|
+
== Questions or problems?
|
35
|
+
|
36
|
+
If you have any issues with Goobalize3 please add an {issue on GitHub}[https://github.com/pioz/goobalize3/issues]
|
37
|
+
or fork the project and send a pull request.
|
38
|
+
|
39
|
+
== Copyright
|
40
|
+
|
41
|
+
Copyright (c) 2010 Enrico Pilotto.
|
data/Rakefile
ADDED
data/goobalize3.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "goobalize3/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "goobalize3"
|
7
|
+
s.version = Goobalize3::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Enrico Pilotto"]
|
10
|
+
s.email = ["enrico@megiston.it"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Auto translate with Google Translate the Globalize3 attributes}
|
13
|
+
s.description = s.summary
|
14
|
+
s.add_dependency('globalize3')
|
15
|
+
|
16
|
+
|
17
|
+
s.rubyforge_project = "goobalize3"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'goobalize3'
|
data/lib/goobalize3.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Goobalize3
|
2
|
+
require File.expand_path('../google_translate', __FILE__)
|
3
|
+
|
4
|
+
def translate(*args)
|
5
|
+
if self.class.translates?
|
6
|
+
cur_locale = I18n.locale
|
7
|
+
targets = I18n.available_locales - [I18n.locale]
|
8
|
+
args.map!{|l| l.to_s.downcase.to_sym}
|
9
|
+
targets = targets & args unless args.empty?
|
10
|
+
targets.each do |locale|
|
11
|
+
autotranslated_attributes = {}
|
12
|
+
self.class.translated_attribute_names.each do |attr_name|
|
13
|
+
begin
|
14
|
+
autotranslated_attributes[attr_name] = GoogleTranslate.perform(:source => cur_locale, :target => locale, :q => self.send(attr_name))
|
15
|
+
rescue GoogleTranslateException => e
|
16
|
+
end
|
17
|
+
end
|
18
|
+
I18n.locale = locale
|
19
|
+
self.update_attributes(autotranslated_attributes)
|
20
|
+
end
|
21
|
+
I18n.locale = cur_locale
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
Globalize::ActiveRecord::InstanceMethods.send(:include, Goobalize3)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module GoogleTranslate
|
2
|
+
require 'net/http'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
HOST = 'www.googleapis.com'
|
6
|
+
SERVICE = '/language/translate/v2'
|
7
|
+
|
8
|
+
def self.get_api
|
9
|
+
config_file = "#{Rails.root}/config/google_translate.yml"
|
10
|
+
#config_file = File.expand_path('../google_translate.yml', __FILE__)
|
11
|
+
if File.exists?(config_file)
|
12
|
+
@@goole_translate_api = YAML.load_file(config_file)['api']
|
13
|
+
raise GoogleTranslateException.new("No API key found in '#{config_file}'") if @@goole_translate_api.blank?
|
14
|
+
return @@goole_translate_api
|
15
|
+
else
|
16
|
+
raise GoogleTranslateException.new("No config file found '#{config_file}'")
|
17
|
+
end
|
18
|
+
return nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.perform(params)
|
22
|
+
@@goole_translate_api ||= get_api
|
23
|
+
params[:q] = CGI::escape(params[:q])
|
24
|
+
params.merge!(:key => @@goole_translate_api)
|
25
|
+
data = []
|
26
|
+
params.each_pair { |k,v| data << "#{k}=#{v}" }
|
27
|
+
query_string = data.join('&')
|
28
|
+
http = Net::HTTP.new(HOST, 443)
|
29
|
+
http.use_ssl = true
|
30
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
31
|
+
response, data = http.get("#{SERVICE}?#{query_string}")
|
32
|
+
json = JSON.parse(data)
|
33
|
+
raise GoogleTranslateException.new(json['error']['errors'].first['message']) if json['error']
|
34
|
+
if json['data'] && json['data']['translations'] && json['data']['translations'].first['translatedText']
|
35
|
+
return CGI::unescapeHTML(json['data']['translations'].first['translatedText'])
|
36
|
+
else
|
37
|
+
raise GoogleTranslateException.new('Unknown error')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class GoogleTranslateException < StandardError; end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: goobalize3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Enrico Pilotto
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-01-21 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: globalize3
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
description: Auto translate with Google Translate the Globalize3 attributes
|
34
|
+
email:
|
35
|
+
- enrico@megiston.it
|
36
|
+
executables: []
|
37
|
+
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
42
|
+
files:
|
43
|
+
- .gitignore
|
44
|
+
- Gemfile
|
45
|
+
- README.rdoc
|
46
|
+
- Rakefile
|
47
|
+
- goobalize3.gemspec
|
48
|
+
- init.rb
|
49
|
+
- lib/goobalize3.rb
|
50
|
+
- lib/goobalize3/version.rb
|
51
|
+
- lib/google_translate.rb
|
52
|
+
has_rdoc: true
|
53
|
+
homepage: ""
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
requirements: []
|
78
|
+
|
79
|
+
rubyforge_project: goobalize3
|
80
|
+
rubygems_version: 1.3.7
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Auto translate with Google Translate the Globalize3 attributes
|
84
|
+
test_files: []
|
85
|
+
|