i18n-tasks 0.2.10 → 0.2.11
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.
- 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
|