traduction 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9008e3461cbd3d36f81d7b0e9e756f8302fb61e7
4
- data.tar.gz: adaaa13c0a30bd81ca964025340a336ce372e9b6
3
+ metadata.gz: 629c318e186d7c51213c2de944b13a54e6787b41
4
+ data.tar.gz: a78f2a7d171e7fadf460de5827ad5acd209b7248
5
5
  SHA512:
6
- metadata.gz: 15e40f1133311669790db05048295c046ebd9170441df26e5049d442a959fc125335ef8b7dfe216a24937900cf9a831eddc564500eb50eb3e6d22236fc9aa076
7
- data.tar.gz: fbf7848a8098a682046c0aa0d8e4de25e8c2d3c5c0e64028c8ee452936a4177b3afe98dbcc649c3c47d5f12a33bf8e97f213ea1a3e0403e5cd7784fa4d856bbd
6
+ metadata.gz: f9f2649e1057e6c6b223c4f7ecb166751b97f6d884f5b791aea3f29e34e9e7df529026d42f2beef46fc8aedd135c60e6e525e80f33bc4f6b3019ac3f71ae563f
7
+ data.tar.gz: 3d6f0427004ef38cb1b99e658df588be2d61e9c42e0133f19320b0994286b1017c8fd6c27ad596dad818f77c9354a0d5cc3c4d9b9bee0d56ffe87a4b5c76ff86
@@ -1,4 +1,6 @@
1
1
  require 'git'
2
+ require 'csv'
3
+ require 'active_support'
2
4
 
3
5
  class Hash
4
6
  include Traduction::HashMethods
@@ -12,12 +14,11 @@ namespace :traduction do
12
14
  locale_to_check = args.locale
13
15
  default_locale = Traduction::I18n.load_default_locale
14
16
 
15
- Traduction::I18n.diff_locales(from: [default_locale[:key], File.open(default_locale[:file])],
17
+ puts Traduction::I18n.diff_locales(
18
+ from: [default_locale[:key], File.open(default_locale[:file])],
16
19
  to: [locale_to_check, File.open(Traduction::I18n.locale_file(locale_to_check))],
17
20
  prefix: locale_to_check,
18
- empty_message: 'No untranslated key') do |k,v|
19
- "'#{k}' key missing (original value '#{v}')"
20
- end
21
+ header: ['Untranslated keys', 'original value'])
21
22
  end
22
23
  task :untranslated => :environment
23
24
 
@@ -27,12 +28,11 @@ namespace :traduction do
27
28
  locale_to_check = args.locale
28
29
  default_locale = Traduction::I18n.load_default_locale
29
30
 
30
- Traduction::I18n.diff_locales(from: [locale_to_check, File.open(Traduction::I18n.locale_file(locale_to_check))],
31
+ puts Traduction::I18n.diff_locales(
32
+ from: [locale_to_check, File.open(Traduction::I18n.locale_file(locale_to_check))],
31
33
  to: [default_locale[:key], File.open(default_locale[:file])],
32
34
  prefix: locale_to_check,
33
- empty_message: 'No obsolete key') do |k,v|
34
- "'#{k}' (value \"#{v}\") key is obsolete"
35
- end
35
+ header: ['Obsolete key', 'value'])
36
36
  end
37
37
  task :obsolete => :environment
38
38
 
@@ -46,13 +46,38 @@ namespace :traduction do
46
46
 
47
47
  commit_sha = args.revision
48
48
 
49
- Traduction::I18n.diff_locales(from: [locale_to_check, File.open(Traduction::I18n.locale_file(locale_to_check))],
49
+ puts Traduction::I18n.diff_locales(
50
+ from: [locale_to_check, File.open(Traduction::I18n.locale_file(locale_to_check))],
50
51
  to: [locale_to_check, g.object("#{commit_sha}:#{Traduction::I18n.locale_file(locale_to_check)}").contents],
51
52
  prefix: default_locale[:key],
52
- empty_message: 'No added key') do |k,v|
53
- "'#{k}' key has been added since #{commit_sha} (value '#{v}')"
54
- end
53
+ header: ["Added key since #{commit_sha}", 'value'])
55
54
  end
56
55
  task :added => :environment
57
56
 
57
+ desc "List keys from csv file returned by translators"
58
+ task :import, [:locale, :filename] do |t, args|
59
+ default_locale = Traduction::I18n.load_default_locale
60
+ args.with_defaults(:locale => default_locale[:key], :filename => nil)
61
+ locale_to_check = args.locale
62
+
63
+ keys_to_import = {}
64
+
65
+ csv = CSV.foreach(args.filename, Traduction::CSV_FORMAT) do |row|
66
+ yaml_full = row[0].split('.')
67
+ keys = {}
68
+ yaml_full.reverse.each_with_index do |key, idx|
69
+ if idx == 0
70
+ keys[key] = row[1]
71
+ else
72
+ keys = {key => keys}
73
+ end
74
+ end
75
+ keys_to_import.deep_merge!(keys)
76
+ end
77
+
78
+ origin_content = YAML::load(File.open(Traduction::I18n.locale_file(locale_to_check)))
79
+ puts origin_content.to_hash.deep_merge(keys_to_import).sort_by_key(true).to_yaml
80
+ end
81
+ task :import => :environment
82
+
58
83
  end
@@ -3,6 +3,7 @@ require "traduction/hash_methods"
3
3
  require "traduction/i18n"
4
4
 
5
5
  module Traduction
6
+ CSV_FORMAT = { :col_sep => ';', :force_quotes=>true, :quote_char => '"' }
6
7
  class Engine < Rails::Engine
7
8
  end if defined?(Rails) && Rails::VERSION::MAJOR >= 3
8
9
  end
@@ -38,5 +38,15 @@ module Traduction
38
38
  diff_hash
39
39
  end
40
40
 
41
+ def sort_by_key(recursive=false, &block)
42
+ self.keys.sort(&block).reduce({}) do |seed, key|
43
+ seed[key] = self[key]
44
+ if recursive && seed[key].is_a?(Hash)
45
+ seed[key] = seed[key].sort_by_key(true, &block)
46
+ end
47
+ seed
48
+ end
49
+ end
50
+
41
51
  end
42
52
  end
@@ -7,23 +7,30 @@ module Traduction
7
7
  from_prefix, from_content = options[:from].to_a
8
8
  to_prefix, to_content = options[:to].to_a
9
9
  prefix = options[:prefix]
10
+ header = options[:header]
11
+ format = options[:format] || :csv
10
12
 
11
13
  from = YAML::load(from_content)[from_prefix]
12
14
  to = YAML::load(to_content)[to_prefix]
13
15
 
14
- messages = diff_yaml(from, to, prefix: prefix) do |k,v|
15
- yield k,v
16
- end
16
+ data = diff_yaml(from, to, prefix: prefix)
17
17
 
18
- display_messages(messages, empty_message: 'No added keys')
18
+ generate_csv(data, header: header)
19
19
  end
20
20
 
21
- def display_messages(messages, options = {})
22
- empty_message = options[:empty_message] || 'Nothing found'
23
- if messages.present?
24
- messages.each { |m| puts m }
25
- else
26
- puts empty_message
21
+ def generate_csv(data, options = {})
22
+ header = options[:header] || nil
23
+
24
+ CSV.generate(Traduction::CSV_FORMAT) do |csv|
25
+ unless header.nil?
26
+ case header
27
+ when String
28
+ csv << [header]
29
+ when Array
30
+ csv << header
31
+ end
32
+ end
33
+ data.each { |m| csv << m } if data.present?
27
34
  end
28
35
  end
29
36
 
@@ -40,15 +47,27 @@ module Traduction
40
47
  end
41
48
 
42
49
  def diff_yaml(from, to, options = {}, &block)
43
- messages = []
44
50
  prefix = options[:prefix] || nil
51
+ data = []
52
+
45
53
  from.diff_more(to, :ignore_values => true).flatten_keys(prefix).each do |k,v|
46
- messages << yield(k,v)
54
+ data << [k,v]
47
55
  end
48
- messages
56
+
57
+ data
49
58
  end
50
59
  end
51
60
 
52
61
  extend I18nMethods
53
62
  end
54
63
  end
64
+ #
65
+ #
66
+ #text: (CSV.generate do |csv|
67
+ # 63 csv << @header
68
+ # 64 @ragreements.each do |o|
69
+ # 65 csv << o.values.map { |l| l.is_a?(Array) ? l.join("\n") : l }
70
+ # 66 end
71
+ # 67 end)
72
+ #
73
+ #
@@ -1,3 +1,3 @@
1
1
  module Traduction
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -22,4 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_dependency "rake"
24
24
  spec.add_dependency "git"
25
+ spec.add_dependency "fastercsv"
26
+ spec.add_dependency "activesupport"
25
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: traduction
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Kienlen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-28 00:00:00.000000000 Z
11
+ date: 2013-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fastercsv
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activesupport
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: Simple tool to ease synchronization of locale files
70
98
  email:
71
99
  - thomas.kienlen@lafourmi-immo.com