i18n-tasks 0.9.27 → 0.9.28
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/config/locales/ru.yml +4 -0
- data/i18n-tasks.gemspec +1 -0
- data/lib/i18n/tasks.rb +6 -0
- data/lib/i18n/tasks/data/file_formats.rb +2 -0
- data/lib/i18n/tasks/missing_keys.rb +28 -7
- data/lib/i18n/tasks/plural_keys.rb +19 -0
- data/lib/i18n/tasks/reports/terminal.rb +2 -5
- data/lib/i18n/tasks/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: daf654e97c52cba1413c10e69c12510ed9ce438e2fabf089bdb05b38ac944c5c
|
4
|
+
data.tar.gz: 7d3d264ca3a630497da4c7c5fc48907cf22c55bd0f16ac51bffed22febb540f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fd90385cd85755fcb9ef3f53a1a21f09a6ac217d8f9153871ade1cd38a155dbd2eb585a2ac0b059938b07b50578949c2291012fb97b4c1169a470b1ee59d84c
|
7
|
+
data.tar.gz: de5ee6c4256599189f4934b97595364d39b242e4645ac017c59ea2f2a172296628340b53bbcd2b54df0657bbddd92fe0e8bee69f980e915b1a286a025eff8b78
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ i18n-tasks can be used with any project using the ruby [i18n gem][i18n-gem] (def
|
|
22
22
|
Add i18n-tasks to the Gemfile:
|
23
23
|
|
24
24
|
```ruby
|
25
|
-
gem 'i18n-tasks', '~> 0.9.
|
25
|
+
gem 'i18n-tasks', '~> 0.9.28'
|
26
26
|
```
|
27
27
|
|
28
28
|
Copy the default [configuration file](#configuration):
|
data/config/locales/ru.yml
CHANGED
@@ -69,6 +69,8 @@ ru:
|
|
69
69
|
invalid_format: 'Неизвестный формат %{invalid}. Форматы: %{valid}.'
|
70
70
|
invalid_locale: Неверный язык %{invalid}
|
71
71
|
invalid_missing_type:
|
72
|
+
few: 'Неизвестные типы: %{invalid}. Типы: %{valid}.'
|
73
|
+
many: 'Неизвестные типы: %{invalid}. Типы: %{valid}.'
|
72
74
|
one: 'Неизвестный тип %{invalid}. Типы: %{valid}.'
|
73
75
|
other: 'Неизвестные типы: %{invalid}. Типы: %{valid}.'
|
74
76
|
pass_forest: Передайте дерево
|
@@ -108,6 +110,8 @@ ru:
|
|
108
110
|
none: Всё переведено.
|
109
111
|
remove_unused:
|
110
112
|
confirm:
|
113
|
+
few: Переводы (%{count}) будут удалены из %{locales}.
|
114
|
+
many: Переводы (%{count}) будут удалены из %{locales}.
|
111
115
|
one: "%{count} перевод будут удалён из %{locales}."
|
112
116
|
other: Переводы (%{count}) будут удалены из %{locales}.
|
113
117
|
noop: Нет неиспользуемых ключей
|
data/i18n-tasks.gemspec
CHANGED
@@ -39,6 +39,7 @@ TEXT
|
|
39
39
|
s.add_dependency 'highline', '>= 2.0.0'
|
40
40
|
s.add_dependency 'i18n'
|
41
41
|
s.add_dependency 'parser', '>= 2.2.3.0'
|
42
|
+
s.add_dependency 'rails-i18n'
|
42
43
|
s.add_dependency 'rainbow', '>= 2.2.2', '< 4.0'
|
43
44
|
s.add_dependency 'terminal-table', '>= 1.5.1'
|
44
45
|
s.add_development_dependency 'axlsx', '~> 2.0'
|
data/lib/i18n/tasks.rb
CHANGED
@@ -64,6 +64,12 @@ require 'i18n/tasks/base_task'
|
|
64
64
|
|
65
65
|
# Add internal locale data to i18n gem load path
|
66
66
|
require 'i18n'
|
67
|
+
|
67
68
|
Dir[File.join(I18n::Tasks.gem_path, 'config', 'locales', '*.yml')].each do |locale_file|
|
68
69
|
I18n.config.load_path << locale_file
|
69
70
|
end
|
71
|
+
|
72
|
+
# Load pluralization data
|
73
|
+
require 'rails-i18n'
|
74
|
+
I18n.enforce_available_locales = false
|
75
|
+
RailsI18n::Railtie.add('rails/pluralization/*.rb')
|
@@ -2,21 +2,22 @@
|
|
2
2
|
|
3
3
|
require 'set'
|
4
4
|
module I18n::Tasks
|
5
|
-
module MissingKeys
|
6
|
-
MISSING_TYPES =
|
7
|
-
used
|
8
|
-
diff
|
9
|
-
|
5
|
+
module MissingKeys # rubocop:disable Metrics/ModuleLength
|
6
|
+
MISSING_TYPES = %w[
|
7
|
+
used
|
8
|
+
diff
|
9
|
+
plural
|
10
|
+
].freeze
|
10
11
|
|
11
12
|
def self.missing_keys_types
|
12
|
-
@missing_keys_types ||= MISSING_TYPES
|
13
|
+
@missing_keys_types ||= MISSING_TYPES
|
13
14
|
end
|
14
15
|
|
15
16
|
def missing_keys_types
|
16
17
|
MissingKeys.missing_keys_types
|
17
18
|
end
|
18
19
|
|
19
|
-
# @param types [:used, :diff] all if `nil`.
|
20
|
+
# @param types [:used, :diff, :plural] all if `nil`.
|
20
21
|
# @return [Siblings]
|
21
22
|
def missing_keys(locales: nil, types: nil, base_locale: nil)
|
22
23
|
locales ||= self.locales
|
@@ -55,6 +56,26 @@ module I18n::Tasks
|
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
59
|
+
def missing_plural_forest(locales, _base = base_locale)
|
60
|
+
locales.each_with_object(empty_forest) do |locale, forest|
|
61
|
+
next unless I18n.exists?(:'i18n.plural.keys', locale)
|
62
|
+
required_keys = Set.new(I18n.t(:'i18n.plural.keys', locale: locale, resolve: false))
|
63
|
+
tree = empty_forest
|
64
|
+
plural_nodes data[locale] do |node|
|
65
|
+
children = node.children
|
66
|
+
present_keys = Set.new(children.map { |c| c.key.to_sym })
|
67
|
+
next if present_keys.superset?(required_keys)
|
68
|
+
tree[node.full_key] = node.derive(
|
69
|
+
value: children.to_hash,
|
70
|
+
children: nil,
|
71
|
+
data: node.data.merge(missing_keys: (required_keys - present_keys).to_a)
|
72
|
+
)
|
73
|
+
end
|
74
|
+
tree.set_root_key!(locale, type: :missing_plural)
|
75
|
+
forest.merge!(tree)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
58
79
|
# keys present in compared_to, but not in locale
|
59
80
|
def missing_diff_tree(locale, compared_to = base_locale)
|
60
81
|
data[compared_to].select_keys do |key, _node|
|
@@ -31,10 +31,29 @@ module I18n::Tasks::PluralKeys
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
# @param [::I18n::Tasks::Data::Tree::Traversal] tree
|
35
|
+
# @yieldparam node [::I18n::Tasks::Data::Tree::Node] plural node
|
36
|
+
def plural_nodes(tree)
|
37
|
+
return to_enum(:plural_nodes, tree) unless block_given?
|
38
|
+
visited = Set.new
|
39
|
+
tree.leaves do |node|
|
40
|
+
parent = node.parent
|
41
|
+
next if !parent || visited.include?(parent)
|
42
|
+
yield parent if plural_forms?(parent.children)
|
43
|
+
visited.add(parent)
|
44
|
+
end
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
34
48
|
def plural_forms?(s)
|
49
|
+
return false if non_plural_other?(s)
|
35
50
|
s.present? && s.all? { |node| node.leaf? && plural_suffix?(node.key) }
|
36
51
|
end
|
37
52
|
|
53
|
+
def non_plural_other?(s)
|
54
|
+
s.size == 1 && s.first.leaf? && (!s.first.value.is_a?(String) || !s.first.value.include?('%{count}'))
|
55
|
+
end
|
56
|
+
|
38
57
|
def plural_suffix?(key)
|
39
58
|
PLURAL_KEY_SUFFIXES.include?(key)
|
40
59
|
end
|
@@ -34,11 +34,6 @@ module I18n
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def icon(type)
|
38
|
-
glyph = missing_type_info(type)[:glyph]
|
39
|
-
{ missing_used: Rainbow(glyph).red, missing_diff: Rainbow(glyph).yellow }[type]
|
40
|
-
end
|
41
|
-
|
42
37
|
def used_keys(used_tree = task.used_tree)
|
43
38
|
# For the used tree we may have usage nodes that are not leaves as references.
|
44
39
|
keys_nodes = used_tree.nodes.select { |node| node.data[:occurrences].present? }.map do |node|
|
@@ -114,6 +109,8 @@ module I18n
|
|
114
109
|
def missing_key_info(leaf)
|
115
110
|
if leaf[:type] == :missing_used
|
116
111
|
first_occurrence leaf
|
112
|
+
elsif leaf[:type] == :missing_plural
|
113
|
+
leaf[:data][:missing_keys].join(', ')
|
117
114
|
else
|
118
115
|
"#{Rainbow(leaf[:data][:missing_diff_locale]).cyan} "\
|
119
116
|
"#{format_value(leaf[:value].is_a?(String) ? leaf[:value].strip : leaf[:value])}"
|
data/lib/i18n/tasks/version.rb
CHANGED
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.9.
|
4
|
+
version: 0.9.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 2.2.3.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rails-i18n
|
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: rainbow
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|