i18n-tasks 0.2.10 → 0.2.11

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: 31bf9c531249255541d82c38054138c02805bdad
4
- data.tar.gz: d58609500eff53d8ed0ddd5b5f6abb94ead03085
3
+ metadata.gz: e5f6e76606d7dd49f09c15b59a7cb0090cd7fde5
4
+ data.tar.gz: 2a926a8c845b17edb62406c48bddc805ec1bcd37
5
5
  SHA512:
6
- metadata.gz: 1b18557d8e748c7fe574f60ddda988703929b32a865fe33eb96523a33c83c92c7e2ec99191f9b5653ce8c114ebebedbbe24cccbfc3d3ebf6f928d82b542debfd
7
- data.tar.gz: 1c584404ba07c8ec32465cc5719709d2aa41dbff76218c3cda010b5a72ea4db42824de5af66209a0c83b2f926b2b727d9a4f1095b129c34185ac5bea16536917
6
+ metadata.gz: 8ecf7561e9bbd78b4a0bc3ac08b25e9b0416129acb2dbc05ff465d0dd29f9925a5efb8396b217c87e3730db57b6f62a673c67272e0340f83fcf53aff946d41e0
7
+ data.tar.gz: 3797630ebef48dd78885bce77e23a2ace0e9478dc2f2d54af9a1fd512896533a0d76ae6d98db23dfa064fdd03b19d745a2f13c0923b5b73df2fd0672b565b05d
data/CHANGES.md CHANGED
@@ -1,4 +1,8 @@
1
- ## v0.2.5..0.2.9
1
+ ## v0.2.1
2
+
3
+ * New task: `i18n:remove_unused`
4
+
5
+ ## v0.2.5..0.2.10
2
6
 
3
7
  * config/i18n-tasks.yml now processed with ERB
4
8
  * can now be used with any ruby apps, not just Rails
data/README.md CHANGED
@@ -14,10 +14,21 @@ There are reports for missing and unused translations:
14
14
  ```bash
15
15
  rake i18n:missing
16
16
  rake i18n:unused
17
- # or save both to an xlsx file:
17
+ ```
18
+
19
+ You can also export missing and unused data to XLSX though there is no importer yet:
20
+
21
+ ```bash
22
+ # or save both to an XLSX file:
18
23
  rake i18n:spreadsheet_report
19
24
  ```
20
25
 
26
+ i18n-tasks can automatically remove all unused translations:
27
+
28
+ ```bash
29
+ rake i18n:remove_unused
30
+ ```
31
+
21
32
  i18n-tasks can add missing keys to the locale data, and it can also fill untranslated values.
22
33
 
23
34
  To add the keys that are not in the base locale but detected in the source do:
@@ -179,6 +190,9 @@ ignore_unused:
179
190
  ignore_missing:
180
191
  - devise.errors.unauthorized # ignore this key
181
192
  - pagination.views.* # ignore the whole pattern
193
+ # E.g to ignore all Rails number / currency keys:
194
+ - 'number.{format, percentage.format, precision.format, human.format, currency.format}.{strip_insignificant_zeros,significant,delimiter}'
195
+ - 'time.{pm,am}'
182
196
 
183
197
  # do not report these keys when they have the same value as the base locale version
184
198
  ignore_eq_base:
data/i18n-tasks.gemspec CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.add_dependency 'easy_translate'
29
29
  s.add_dependency 'term-ansicolor'
30
30
  s.add_dependency 'terminal-table'
31
+ s.add_dependency 'highline'
31
32
  s.add_development_dependency 'axlsx', '~> 2.0'
32
33
  s.add_development_dependency 'bundler', '~> 1.3'
33
34
  s.add_development_dependency 'rake'
@@ -32,6 +32,10 @@ module I18n
32
32
  def initialize(config = {})
33
33
  self.config = config || {}
34
34
  end
35
+
36
+ def in_task(&block)
37
+ instance_exec(&block)
38
+ end
35
39
  end
36
40
  end
37
41
  end
@@ -51,6 +51,7 @@ module I18n::Tasks
51
51
 
52
52
  # set locale tree
53
53
  def set(locale, value_tree)
54
+ locale = locale.to_s
54
55
  out = {}
55
56
  traverse value_tree do |key, value|
56
57
  route = @write.detect { |route| route[0] =~ key }
@@ -60,10 +61,10 @@ module I18n::Tasks
60
61
  (out[path] ||= []) << [key, value]
61
62
  end
62
63
  out.each do |path, data|
63
- File.open(path, 'w') { |f|
64
- f.write({locale.to_s => list_to_tree(data)}.to_yaml)
65
- }
64
+ tree = { locale => list_to_tree(data) }
65
+ File.open(path, 'w') { |f| f.write(tree.to_yaml) }
66
66
  end
67
+ @locale_data[locale] = nil
67
68
  end
68
69
 
69
70
  alias []= set
@@ -36,6 +36,7 @@ module I18n::Tasks::DataTraversal
36
36
  end
37
37
  end
38
38
 
39
+ # [[key, value], ...] list to tree
39
40
  def list_to_tree(list)
40
41
  list = list.sort
41
42
  tree = {}
@@ -48,4 +49,4 @@ module I18n::Tasks::DataTraversal
48
49
  end
49
50
  tree
50
51
  end
51
- end
52
+ end
@@ -35,12 +35,11 @@ module I18n
35
35
  end
36
36
  end
37
37
 
38
- def unused_translations
39
- unused = task.unused_keys
40
- print_title unused_title(unused)
41
- if unused.present?
38
+ def unused_translations(recs = task.unused_keys)
39
+ print_title unused_title(recs)
40
+ if recs.present?
42
41
  print_table headings: [bold(magenta('i18n Key')), cyan("Base value (#{base_locale})")] do |t|
43
- t.rows = unused.map { |x| [magenta(x[0]), cyan(x[1])] }
42
+ t.rows = recs.map { |x| [magenta(x[0]), cyan(x[1])] }
44
43
  end
45
44
  else
46
45
  print_success 'Good job! Every translation is used!'
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+ require 'set'
2
3
 
3
4
  module I18n
4
5
  module Tasks
@@ -11,6 +12,16 @@ module I18n
11
12
  [key, value] unless used_key?(key)
12
13
  end.uniq
13
14
  end
15
+
16
+ def remove_unused!(locales = self.locales)
17
+ exclude = unused_keys.map(&:first).to_set
18
+ locales.each do |locale|
19
+ #require 'byebug'; byebug
20
+ data[locale] = list_to_tree traverse_map_if(data[locale]) { |key, value|
21
+ [key, value] unless exclude.include?(depluralize_key(locale, key))
22
+ }
23
+ end
24
+ end
14
25
  end
15
26
  end
16
- end
27
+ end
@@ -1,5 +1,5 @@
1
1
  module I18n
2
2
  module Tasks
3
- VERSION = '0.2.10'
3
+ VERSION = '0.2.11'
4
4
  end
5
5
  end
@@ -6,6 +6,8 @@ require 'active_support/core_ext/module/delegation'
6
6
  require 'i18n/tasks/reports/spreadsheet'
7
7
 
8
8
  namespace :i18n do
9
+ require 'highline/import'
10
+
9
11
  task :setup do
10
12
  end
11
13
 
@@ -36,6 +38,29 @@ namespace :i18n do
36
38
  i18n_report.unused_translations
37
39
  end
38
40
 
41
+ desc 'add placeholder for missing values to the base locale (default: key.humanize)'
42
+ task :add_missing, [:placeholder] => 'i18n:setup' do |t, args|
43
+ i18n_tasks.add_missing! base_locale, args[:placeholder]
44
+ end
45
+
46
+ desc 'remove unused keys'
47
+ task :remove_unused, [:locales] => 'i18n:setup' do |t, args|
48
+ locales = i18n_parse_locales(args[:locales]) || i18n_tasks.locales
49
+ unused_keys = i18n_tasks.unused_keys
50
+ if unused_keys.present?
51
+ i18n_report.unused_translations(unused_keys)
52
+ exit 1 unless agree(red "All these translations will be removed in #{bold locales * ', '}#{red '.'} " + yellow('Continue? (yes/no)') + ' ')
53
+ i18n_tasks.remove_unused!(locales)
54
+ else
55
+ STDERR.puts bold green 'No unused keys to remove'
56
+ end
57
+ end
58
+
59
+ desc 'normalize translation data: sort and move to the right files'
60
+ task :normalize, [:locales] => 'i18n:setup' do |t, args|
61
+ i18n_tasks.normalize_store! args[:locales]
62
+ end
63
+
39
64
  desc 'save missing and unused translations to an Excel file'
40
65
  task :spreadsheet_report, [:path] => 'i18n:setup' do |t, args|
41
66
  begin
@@ -49,16 +74,6 @@ namespace :i18n do
49
74
  i18n_spreadsheet_report.save_report(args[:path])
50
75
  end
51
76
 
52
- desc 'normalize translation data: sort and move to the right files'
53
- task :normalize, [:locales] => 'i18n:setup' do |t, args|
54
- i18n_tasks.normalize_store! args[:locales]
55
- end
56
-
57
- desc 'add placeholder for missing values to the base locale (default: key.humanize)'
58
- task :add_missing, [:placeholder] => 'i18n:setup' do |t, args|
59
- i18n_tasks.add_missing! base_locale, args[:placeholder]
60
- end
61
-
62
77
  desc 'fill translations with values'
63
78
  namespace :fill do
64
79
 
@@ -15,10 +15,31 @@ describe 'rake i18n' do
15
15
  end
16
16
 
17
17
  describe 'unused' do
18
+ let(:expected_unused_keys) { %w(unused.a unused.numeric unused.plural) }
19
+
18
20
  it 'detects unused' do
19
21
  TestCodebase.capture_stderr do
20
22
  out = TestCodebase.rake_result('i18n:unused')
21
- out.should be_i18n_keys %w(unused.a unused.numeric unused.plural)
23
+ out.should be_i18n_keys expected_unused_keys
24
+ end
25
+ end
26
+
27
+ it 'removes unused' do
28
+ TestCodebase.in_test_app_dir do
29
+ t = I18n::Tasks::BaseTask.new
30
+
31
+ expected_unused_keys.each do |key|
32
+ t.t(t.data[:en], key).should be_present
33
+ t.t(t.data[:es], key).should be_present
34
+ end
35
+
36
+ t.remove_unused!(t.locales)
37
+
38
+ # or save both to an xlsx file:
39
+ expected_unused_keys.each do |key|
40
+ t.t(t.data[:en], key).should be_nil
41
+ t.t(t.data[:es], key).should be_nil
42
+ end
22
43
  end
23
44
  end
24
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-03 00:00:00.000000000 Z
11
+ date: 2013-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: highline
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: axlsx
99
113
  requirement: !ruby/object:Gem::Requirement