i18n-tasks 0.9.19 → 0.9.20
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/README.md +2 -2
- data/bin/i18n-tasks +1 -3
- data/config/locales/en.yml +2 -0
- data/config/locales/ru.yml +1 -0
- data/i18n-tasks.gemspec +4 -4
- data/lib/i18n/tasks/cli.rb +1 -3
- data/lib/i18n/tasks/command/commands/health.rb +1 -3
- data/lib/i18n/tasks/command/commands/missing.rb +1 -1
- data/lib/i18n/tasks/command/commands/tree.rb +7 -2
- data/lib/i18n/tasks/command/options/data.rb +1 -3
- data/lib/i18n/tasks/data/tree/siblings.rb +8 -8
- data/lib/i18n/tasks/data/tree/traversal.rb +1 -3
- data/lib/i18n/tasks/google_translation.rb +2 -6
- data/lib/i18n/tasks/missing_keys.rb +1 -1
- data/lib/i18n/tasks/reports/terminal.rb +1 -1
- data/lib/i18n/tasks/scanners/results/occurrence.rb +1 -0
- data/lib/i18n/tasks/scanners/ruby_ast_call_finder.rb +1 -3
- data/lib/i18n/tasks/used_keys.rb +0 -1
- data/lib/i18n/tasks/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a681c4a39649fe7ca79db081a601cc2f5bb07bf
|
4
|
+
data.tar.gz: f515693226f21bbf07166f9087dbb5e6f8558eca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adf7878cfb47362d5997d34870cb2a66c75e1487074b803ef7655d34d1f01343d4f2567150390d2155f8e061e0e9602ed3cd7778b1cd424138090bb400a24c84
|
7
|
+
data.tar.gz: eac041f710bdff5bd664e880bfed31ded2f6d90db6e2b53c17d3f67f4ae2fa55d40441624039c11e648da0569e8d02f3d008a377f12f7fd3162f5babcb21aa7a
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ i18n-tasks can be used with any project using the ruby [i18n gem][i18n-gem] (def
|
|
24
24
|
Add i18n-tasks to the Gemfile:
|
25
25
|
|
26
26
|
```ruby
|
27
|
-
gem 'i18n-tasks', '~> 0.9.
|
27
|
+
gem 'i18n-tasks', '~> 0.9.20'
|
28
28
|
```
|
29
29
|
|
30
30
|
Copy the default [configuration file](#configuration):
|
@@ -189,7 +189,7 @@ $ i18n-tasks unused -f yaml | i18n-tasks data-remove
|
|
189
189
|
|
190
190
|
Remove all keys in `fr` but not `en` from `fr`:
|
191
191
|
```console
|
192
|
-
$ i18n-tasks missing -t diff -f yaml en | i18n-tasks tree-
|
192
|
+
$ i18n-tasks missing -t diff -f yaml en | i18n-tasks tree-mv en fr | i18n-tasks data-remove
|
193
193
|
```
|
194
194
|
|
195
195
|
See the full list of tasks with `i18n-tasks --help`.
|
data/bin/i18n-tasks
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
if ENV['I18N_TASKS_BIN_SIMPLECOV_COVERAGE']
|
5
|
-
require_relative '../spec/bin_simplecov_helper'
|
6
|
-
end
|
4
|
+
require_relative '../spec/bin_simplecov_helper' if ENV['I18N_TASKS_BIN_SIMPLECOV_COVERAGE']
|
7
5
|
|
8
6
|
# prevent i18n gem warning
|
9
7
|
require 'i18n'
|
data/config/locales/en.yml
CHANGED
@@ -9,6 +9,8 @@ en:
|
|
9
9
|
args:
|
10
10
|
default_text: 'Default: %{value}'
|
11
11
|
desc:
|
12
|
+
all_locales: Do not expect key patterns to start with a locale, instead apply them to all
|
13
|
+
locales implicitly.
|
12
14
|
confirm: Confirm automatically
|
13
15
|
data_format: 'Data format: %{valid_text}.'
|
14
16
|
key_pattern: Filter by key pattern (e.g. 'common.*')
|
data/config/locales/ru.yml
CHANGED
@@ -7,6 +7,7 @@ ru:
|
|
7
7
|
args:
|
8
8
|
default_text: 'По умолчанию: %{value}'
|
9
9
|
desc:
|
10
|
+
all_locales: Не ожидать, что маски ключа начинаются с локали. Применять маски ко всем локалям.
|
10
11
|
confirm: Подтвердить автоматом
|
11
12
|
data_format: 'Формат данных: %{valid_text}. %{default_text}.'
|
12
13
|
key_pattern: Маска ключа (например, common.*)
|
data/i18n-tasks.gemspec
CHANGED
@@ -24,10 +24,10 @@ cp $(i18n-tasks gem-path)/templates/config/i18n-tasks.yml config/
|
|
24
24
|
cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/
|
25
25
|
TEXT
|
26
26
|
s.homepage = 'https://github.com/glebm/i18n-tasks'
|
27
|
-
if s.respond_to?(:metadata=)
|
28
|
-
|
29
|
-
end
|
27
|
+
s.metadata = { 'issue_tracker' => 'https://github.com/glebm/i18n-tasks' } if s.respond_to?(:metadata=)
|
28
|
+
# rubocop:disable Gemspec/RequiredRubyVersion
|
30
29
|
s.required_ruby_version = '~> 2.1' if s.respond_to?(:required_ruby_version=)
|
30
|
+
# rubocop:enable Gemspec/RequiredRubyVersion
|
31
31
|
|
32
32
|
s.files = `git ls-files`.split($/)
|
33
33
|
s.files -= s.files.grep(%r{^(doc/|\.|spec/)}) + %w[CHANGES.md config/i18n-tasks.yml Gemfile]
|
@@ -37,7 +37,7 @@ TEXT
|
|
37
37
|
|
38
38
|
s.add_dependency 'activesupport', '>= 4.0.2'
|
39
39
|
s.add_dependency 'ast', '>= 2.1.0'
|
40
|
-
s.add_dependency 'easy_translate', '>= 0.5.
|
40
|
+
s.add_dependency 'easy_translate', '>= 0.5.1'
|
41
41
|
s.add_dependency 'erubi'
|
42
42
|
s.add_dependency 'highline', '>= 1.7.3'
|
43
43
|
s.add_dependency 'i18n'
|
data/lib/i18n/tasks/cli.rb
CHANGED
@@ -101,9 +101,7 @@ class I18n::Tasks::CLI
|
|
101
101
|
|
102
102
|
def allow_help_arg_first!(argv)
|
103
103
|
# allow `i18n-tasks --help command` in addition to `i18n-tasks command --help`
|
104
|
-
if %w[-h --help].include?(argv[0]) && argv[1] && !argv[1].start_with?('-')
|
105
|
-
argv[0], argv[1] = argv[1], argv[0]
|
106
|
-
end
|
104
|
+
argv[0], argv[1] = argv[1], argv[0] if %w[-h --help].include?(argv[0]) && argv[1] && !argv[1].start_with?('-')
|
107
105
|
end
|
108
106
|
|
109
107
|
def parse_command!(argv)
|
@@ -14,9 +14,7 @@ module I18n::Tasks
|
|
14
14
|
def health(opt = {})
|
15
15
|
forest = i18n.data_forest(opt[:locales])
|
16
16
|
stats = i18n.forest_stats(forest)
|
17
|
-
if stats[:key_count].zero?
|
18
|
-
fail CommandError, t('i18n_tasks.health.no_keys_detected')
|
19
|
-
end
|
17
|
+
fail CommandError, t('i18n_tasks.health.no_keys_detected') if stats[:key_count].zero?
|
20
18
|
terminal_report.forest_stats forest, stats
|
21
19
|
[missing(opt), unused(opt), check_normalized(opt)].detect { |result| result == :exit_1 }
|
22
20
|
end
|
@@ -28,7 +28,7 @@ module I18n::Tasks
|
|
28
28
|
args: %i[locales out_format missing_types]
|
29
29
|
|
30
30
|
def missing(opt = {})
|
31
|
-
forest = i18n.missing_keys(opt.slice(:locales, :base_locale, :
|
31
|
+
forest = i18n.missing_keys(opt.slice(:locales, :base_locale, :types))
|
32
32
|
print_forest forest, opt, :missing_keys
|
33
33
|
:exit_1 unless forest.empty?
|
34
34
|
end
|
@@ -59,16 +59,21 @@ module I18n::Tasks
|
|
59
59
|
print_forest forest, opt
|
60
60
|
end
|
61
61
|
|
62
|
+
arg :all_locales,
|
63
|
+
'-a',
|
64
|
+
'--all-locales',
|
65
|
+
t('i18n_tasks.cmd.args.desc.all_locales')
|
66
|
+
|
62
67
|
cmd :tree_mv,
|
63
68
|
pos: 'FROM_KEY_PATTERN TO_KEY_PATTERN [tree (or stdin)]',
|
64
69
|
desc: t('i18n_tasks.cmd.desc.tree_mv_key'),
|
65
|
-
args: [
|
70
|
+
args: %i[data_format all_locales]
|
66
71
|
def tree_mv(opt = {})
|
67
72
|
fail CommandError, 'requires FROM_KEY_PATTERN and TO_KEY_PATTERN' if opt[:arguments].size < 2
|
68
73
|
from_pattern = opt[:arguments].shift
|
69
74
|
to_pattern = opt[:arguments].shift
|
70
75
|
forest = forest_pos_or_stdin!(opt)
|
71
|
-
forest.mv_key!(compile_key_pattern(from_pattern), to_pattern, root:
|
76
|
+
forest.mv_key!(compile_key_pattern(from_pattern), to_pattern, root: !opt[:'all-locales'])
|
72
77
|
print_forest forest, opt
|
73
78
|
end
|
74
79
|
|
@@ -63,9 +63,7 @@ module I18n::Tasks
|
|
63
63
|
|
64
64
|
# @return [I18n::Tasks::Data::Tree::Siblings]
|
65
65
|
def parse_forest(src, format)
|
66
|
-
unless src
|
67
|
-
fail CommandError, I18n.t('i18n_tasks.cmd.errors.pass_forest')
|
68
|
-
end
|
66
|
+
fail CommandError, I18n.t('i18n_tasks.cmd.errors.pass_forest') unless src
|
69
67
|
if format == 'keys'
|
70
68
|
::I18n::Tasks::Data::Tree::Siblings.from_key_names parse_keys(src)
|
71
69
|
else
|
@@ -75,8 +75,12 @@ module I18n::Tasks::Data::Tree
|
|
75
75
|
# TODO: support nested references better
|
76
76
|
nodes do |node|
|
77
77
|
next unless node.reference?
|
78
|
-
|
79
|
-
|
78
|
+
old_target = [(node.root.key if root), node.value.to_s].compact.join('.')
|
79
|
+
new_target = old_key_to_new_key[old_target]
|
80
|
+
if new_target
|
81
|
+
new_target = new_target.sub(/\A[^.]*\./, '') if root
|
82
|
+
node.value = new_target.to_sym
|
83
|
+
end
|
80
84
|
end
|
81
85
|
remove_nodes_and_emptied_ancestors! moved_nodes
|
82
86
|
merge! moved_forest
|
@@ -315,12 +319,8 @@ module I18n::Tasks::Data::Tree
|
|
315
319
|
private
|
316
320
|
|
317
321
|
def parse_parent_opt!(opts)
|
318
|
-
if opts[:parent_key]
|
319
|
-
|
320
|
-
end
|
321
|
-
if opts[:parent_attr]
|
322
|
-
opts[:parent] = ::I18n::Tasks::Data::Tree::Node.new(opts[:parent_attr])
|
323
|
-
end
|
322
|
+
opts[:parent] = ::I18n::Tasks::Data::Tree::Node.new(key: opts[:parent_key]) if opts[:parent_key]
|
323
|
+
opts[:parent] = ::I18n::Tasks::Data::Tree::Node.new(opts[:parent_attr]) if opts[:parent_attr]
|
324
324
|
if opts[:parent_locale]
|
325
325
|
opts[:parent] = ::I18n::Tasks::Data::Tree::Node.new(
|
326
326
|
key: opts[:parent_locale], data: { locale: opts[:parent_locale] }
|
@@ -178,9 +178,7 @@ module I18n::Tasks
|
|
178
178
|
value_or_default_or_human_key: node_value.presence || default || human_key
|
179
179
|
)
|
180
180
|
end
|
181
|
-
if key_pattern.present?
|
182
|
-
pattern_re = I18n::Tasks::KeyPatternMatching.compile_key_pattern(key_pattern)
|
183
|
-
end
|
181
|
+
pattern_re = I18n::Tasks::KeyPatternMatching.compile_key_pattern(key_pattern) if key_pattern.present?
|
184
182
|
keys.each do |key, node| # rubocop:disable Performance/HashEachMethods
|
185
183
|
next if pattern_re && key !~ pattern_re
|
186
184
|
node.value = value_proc.call(node)
|
@@ -38,18 +38,14 @@ module I18n::Tasks
|
|
38
38
|
# @return [Array<[String, Object]>] translated list
|
39
39
|
def fetch_google_translations(list, opts)
|
40
40
|
from_values(list, EasyTranslate.translate(to_values(list), opts)).tap do |result|
|
41
|
-
if result.blank?
|
42
|
-
fail CommandError, I18n.t('i18n_tasks.google_translate.errors.no_results')
|
43
|
-
end
|
41
|
+
fail CommandError, I18n.t('i18n_tasks.google_translate.errors.no_results') if result.blank?
|
44
42
|
end
|
45
43
|
end
|
46
44
|
|
47
45
|
private
|
48
46
|
|
49
47
|
def validate_google_translate_api_key!(key)
|
50
|
-
if key.blank?
|
51
|
-
fail CommandError, I18n.t('i18n_tasks.google_translate.errors.no_api_key')
|
52
|
-
end
|
48
|
+
fail CommandError, I18n.t('i18n_tasks.google_translate.errors.no_api_key') if key.blank?
|
53
49
|
end
|
54
50
|
|
55
51
|
# @param [Array<[String, Object]>] list of key-value pairs
|
@@ -16,7 +16,7 @@ module I18n::Tasks
|
|
16
16
|
MissingKeys.missing_keys_types
|
17
17
|
end
|
18
18
|
|
19
|
-
# @param types [:
|
19
|
+
# @param types [:used, :diff] all if `nil`.
|
20
20
|
# @return [Siblings]
|
21
21
|
def missing_keys(locales: nil, types: nil, base_locale: nil)
|
22
22
|
locales ||= self.locales
|
@@ -7,7 +7,7 @@ module I18n
|
|
7
7
|
module Tasks
|
8
8
|
module Reports
|
9
9
|
class Terminal < Base # rubocop:disable Metrics/ClassLength
|
10
|
-
def missing_keys(forest = task.missing_keys)
|
10
|
+
def missing_keys(forest = task.missing_keys)
|
11
11
|
forest = collapse_missing_tree! forest
|
12
12
|
if forest.present?
|
13
13
|
print_title missing_title(forest)
|
@@ -48,9 +48,7 @@ module I18n::Tasks::Scanners
|
|
48
48
|
message = send_node.children[1]
|
49
49
|
valid_receivers = @message_receivers[message]
|
50
50
|
# use `any?` because `include?` checks type equality, but the receiver is a Parser::AST::Node != AST::Node.
|
51
|
-
if valid_receivers && valid_receivers.any? { |r| r == receiver }
|
52
|
-
@callback.call(send_node, @method_name)
|
53
|
-
end
|
51
|
+
@callback.call(send_node, @method_name) if valid_receivers && valid_receivers.any? { |r| r == receiver }
|
54
52
|
# always invoke handler_missing to get nested translations in children
|
55
53
|
handler_missing send_node
|
56
54
|
nil
|
data/lib/i18n/tasks/used_keys.rb
CHANGED
@@ -72,7 +72,6 @@ module I18n::Tasks
|
|
72
72
|
if args && args[:strict]
|
73
73
|
fail CommandError, 'the strict option is global and cannot be applied on the scanner level'
|
74
74
|
end
|
75
|
-
|
76
75
|
ActiveSupport::Inflector.constantize(class_name).new(
|
77
76
|
config: merge_scanner_configs(shared_options, args || {}),
|
78
77
|
file_finder_provider: caching_file_finder_provider,
|
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.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.5.
|
47
|
+
version: 0.5.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.5.
|
54
|
+
version: 0.5.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: erubi
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|