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 +4 -4
- data/CHANGES.md +5 -1
- data/README.md +15 -1
- data/i18n-tasks.gemspec +1 -0
- data/lib/i18n/tasks/base_task.rb +4 -0
- data/lib/i18n/tasks/data/yaml.rb +4 -3
- data/lib/i18n/tasks/data_traversal.rb +2 -1
- data/lib/i18n/tasks/reports/terminal.rb +4 -5
- data/lib/i18n/tasks/unused_keys.rb +12 -1
- data/lib/i18n/tasks/version.rb +1 -1
- data/lib/tasks/i18n-tasks.rake +25 -10
- data/spec/i18n_tasks_spec.rb +22 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5f6e76606d7dd49f09c15b59a7cb0090cd7fde5
|
4
|
+
data.tar.gz: 2a926a8c845b17edb62406c48bddc805ec1bcd37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ecf7561e9bbd78b4a0bc3ac08b25e9b0416129acb2dbc05ff465d0dd29f9925a5efb8396b217c87e3730db57b6f62a673c67272e0340f83fcf53aff946d41e0
|
7
|
+
data.tar.gz: 3797630ebef48dd78885bce77e23a2ace0e9478dc2f2d54af9a1fd512896533a0d76ae6d98db23dfa064fdd03b19d745a2f13c0923b5b73df2fd0672b565b05d
|
data/CHANGES.md
CHANGED
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
|
-
|
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'
|
data/lib/i18n/tasks/base_task.rb
CHANGED
data/lib/i18n/tasks/data/yaml.rb
CHANGED
@@ -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
|
-
|
64
|
-
|
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
|
@@ -35,12 +35,11 @@ module I18n
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def unused_translations
|
39
|
-
|
40
|
-
|
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 =
|
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
|
data/lib/i18n/tasks/version.rb
CHANGED
data/lib/tasks/i18n-tasks.rake
CHANGED
@@ -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
|
|
data/spec/i18n_tasks_spec.rb
CHANGED
@@ -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
|
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.
|
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-
|
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
|