Traduire 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/traduire.rb ADDED
@@ -0,0 +1,3 @@
1
+ Dir[File.dirname(__FILE__) + '/traduire/*.rb'].each do |file|
2
+ load file
3
+ end
@@ -0,0 +1,5 @@
1
+ class EnToEnx2Translation
2
+ def translate(str)
3
+ return str + " " + str
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class EnToEsTranslation < GoogleTranslation
2
+ def initialize
3
+ @translation = "en|es"
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class EnToFrTranslation < GoogleTranslation
2
+ def initialize
3
+ @translation = "en|fr"
4
+ end
5
+ end
@@ -0,0 +1,28 @@
1
+ require 'net/http'
2
+ require 'cgi'
3
+ require 'json'
4
+
5
+ class GoogleTranslation
6
+ def translate(str)
7
+ base = 'http://ajax.googleapis.com/ajax/services/language/translate'
8
+
9
+ params = {
10
+ :langpair => @translation,
11
+ :q => str,
12
+ :v => 1.0
13
+ }
14
+
15
+ query = params.map{|k,v| "#{k}=#{CGI.escape(v.to_s)}"}.join('&')
16
+
17
+ response = Net::HTTP.get_response(URI.parse("#{base}?#{query}"))
18
+
19
+ json = JSON.parse(response.body)
20
+
21
+ if json['responseStatus'] == 200
22
+ translation = json['responseData']['translatedText']
23
+ return translation
24
+ else
25
+ raise StandardError, response['responseDetails']
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,52 @@
1
+ module Traduire
2
+ def self.translation(&block)
3
+ translation = Translation.new
4
+ translation.instance_eval(&block)
5
+ return translation.result
6
+ end
7
+
8
+ class Translation
9
+ attr_accessor :result
10
+
11
+ def from(language)
12
+ @from_language = language
13
+ end
14
+
15
+ def to(language)
16
+ @to_language = language
17
+ end
18
+
19
+ def translate(from_locale)
20
+ @result = {}
21
+ @result[@to_language] = {}
22
+
23
+ translator = load_translator
24
+
25
+ walk = lambda do |key, value|
26
+ case value
27
+ when String then
28
+ translation = translator.translate value
29
+ return translation
30
+ when Hash then
31
+ hash = {}
32
+ value.each do |k, v|
33
+ hash[k] = walk.call(k, v)
34
+ end
35
+ return hash
36
+ end
37
+ end
38
+ from_locale[@from_language].each do |key, value|
39
+ @result[@to_language][key] = walk.call(key, value)
40
+ end
41
+ end
42
+
43
+ def load_translator
44
+ class_constant = Traduire.const_get(translator_name)
45
+ return class_constant.new
46
+ end
47
+
48
+ def translator_name
49
+ @from_language.camelize + "To" + @to_language.camelize + "Translation"
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,34 @@
1
+ require 'traduire'
2
+
3
+ task :default => [:translate]
4
+
5
+ task :translate, [:from_language, :to_language] => [:environment] do |t, args|
6
+ args.with_defaults(:from_language => 'en', :to_language => 'enx2')
7
+ puts "Translating from #{args.from_language} to #{args.to_language}"
8
+
9
+ file_names = Rails::Application.config.i18n.load_path
10
+
11
+ file_names.each do |file_name|
12
+ if (file_name.include? (args.from_language + '.yml'))
13
+ source_yaml = YAML::load(File.open(file_name))
14
+
15
+ translation = Traduire.translation do
16
+ from args.from_language
17
+ to args.to_language
18
+ translate source_yaml
19
+ end
20
+
21
+ translated_yaml = translation.to_yaml
22
+
23
+ translation_file_name = file_name.gsub(args.from_language + '.yml', args.to_language + '.yml')
24
+
25
+ if (File.exists? translation_file_name)
26
+ File.delete translation_file_name
27
+ end
28
+
29
+ File.open(translation_file_name, 'w') do |f|
30
+ f.puts translated_yaml
31
+ end
32
+ end
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Traduire
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
+ - Brian Hazzard
13
+ autorequire: name
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-06-14 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description:
22
+ email:
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - bin/traduire/google_translation.rb
31
+ - bin/traduire/en_to_enx2_translation.rb
32
+ - bin/traduire/en_to_fr_translation.rb
33
+ - bin/traduire/translation.rb
34
+ - bin/traduire/en_to_es_translation.rb
35
+ - bin/translate.rake
36
+ - bin/traduire.rb
37
+ has_rdoc: true
38
+ homepage:
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.3.7
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Translates locale yaml files
69
+ test_files: []
70
+