i18n-tasks 1.0.13 → 1.0.15
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 +125 -38
- data/config/locales/en.yml +14 -5
- data/config/locales/ru.yml +14 -5
- data/i18n-tasks.gemspec +4 -2
- data/lib/i18n/tasks/command/commands/data.rb +14 -0
- data/lib/i18n/tasks/command/commands/missing.rb +3 -1
- data/lib/i18n/tasks/command/option_parsers/enum.rb +4 -3
- data/lib/i18n/tasks/command/options/common.rb +1 -1
- data/lib/i18n/tasks/command/options/locales.rb +12 -3
- data/lib/i18n/tasks/configuration.rb +8 -2
- data/lib/i18n/tasks/data/file_system_base.rb +5 -0
- data/lib/i18n/tasks/data/router/isolating_router.rb +146 -0
- data/lib/i18n/tasks/data/tree/siblings.rb +2 -2
- data/lib/i18n/tasks/interpolations.rb +1 -1
- data/lib/i18n/tasks/key_pattern_matching.rb +4 -4
- data/lib/i18n/tasks/reports/terminal.rb +6 -0
- data/lib/i18n/tasks/scanners/ast_matchers/default_i18n_subject_matcher.rb +26 -0
- data/lib/i18n/tasks/scanners/ast_matchers/rails_model_matcher.rb +1 -1
- data/lib/i18n/tasks/scanners/erb_ast_scanner.rb +55 -25
- data/lib/i18n/tasks/scanners/local_ruby_parser.rb +2 -2
- data/lib/i18n/tasks/scanners/pattern_scanner.rb +1 -1
- data/lib/i18n/tasks/scanners/prism_scanner.rb +83 -0
- data/lib/i18n/tasks/scanners/prism_scanners/arguments_visitor.rb +41 -0
- data/lib/i18n/tasks/scanners/prism_scanners/nodes.rb +334 -0
- data/lib/i18n/tasks/scanners/prism_scanners/visitor.rb +273 -0
- data/lib/i18n/tasks/scanners/relative_keys.rb +1 -1
- data/lib/i18n/tasks/scanners/ruby_ast_scanner.rb +5 -4
- data/lib/i18n/tasks/scanners/ruby_key_literals.rb +1 -1
- data/lib/i18n/tasks/scanners/ruby_parser_factory.rb +27 -0
- data/lib/i18n/tasks/split_key.rb +30 -47
- data/lib/i18n/tasks/translation.rb +4 -1
- data/lib/i18n/tasks/translators/base_translator.rb +11 -1
- data/lib/i18n/tasks/translators/deepl_translator.rb +32 -1
- data/lib/i18n/tasks/translators/google_translator.rb +35 -12
- data/lib/i18n/tasks/translators/openai_translator.rb +55 -23
- data/lib/i18n/tasks/translators/watsonx_translator.rb +155 -0
- data/lib/i18n/tasks/translators/yandex_translator.rb +5 -1
- data/lib/i18n/tasks/used_keys.rb +1 -0
- data/lib/i18n/tasks/version.rb +1 -1
- data/lib/i18n/tasks.rb +1 -0
- data/templates/config/i18n-tasks.yml +26 -3
- metadata +33 -26
- data/lib/i18n/tasks/scanners/erb_ast_processor.rb +0 -74
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n-tasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebm
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-03-07 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: activesupport
|
@@ -38,26 +37,6 @@ dependencies:
|
|
38
37
|
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: 2.1.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: better_html
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.0'
|
48
|
-
- - "<"
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: '3.0'
|
51
|
-
type: :runtime
|
52
|
-
prerelease: false
|
53
|
-
version_requirements: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - ">="
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '1.0'
|
58
|
-
- - "<"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '3.0'
|
61
40
|
- !ruby/object:Gem::Dependency
|
62
41
|
name: erubi
|
63
42
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,6 +127,26 @@ dependencies:
|
|
148
127
|
- - "<"
|
149
128
|
- !ruby/object:Gem::Version
|
150
129
|
version: '4.0'
|
130
|
+
- !ruby/object:Gem::Dependency
|
131
|
+
name: ruby-progressbar
|
132
|
+
requirement: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - "~>"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '1.8'
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 1.8.1
|
140
|
+
type: :runtime
|
141
|
+
prerelease: false
|
142
|
+
version_requirements: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '1.8'
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 1.8.1
|
151
150
|
- !ruby/object:Gem::Dependency
|
152
151
|
name: terminal-table
|
153
152
|
requirement: !ruby/object:Gem::Requirement
|
@@ -388,6 +387,7 @@ files:
|
|
388
387
|
- lib/i18n/tasks/data/file_system.rb
|
389
388
|
- lib/i18n/tasks/data/file_system_base.rb
|
390
389
|
- lib/i18n/tasks/data/router/conservative_router.rb
|
390
|
+
- lib/i18n/tasks/data/router/isolating_router.rb
|
391
391
|
- lib/i18n/tasks/data/router/pattern_router.rb
|
392
392
|
- lib/i18n/tasks/data/tree/node.rb
|
393
393
|
- lib/i18n/tasks/data/tree/nodes.rb
|
@@ -406,9 +406,9 @@ files:
|
|
406
406
|
- lib/i18n/tasks/reports/base.rb
|
407
407
|
- lib/i18n/tasks/reports/terminal.rb
|
408
408
|
- lib/i18n/tasks/scanners/ast_matchers/base_matcher.rb
|
409
|
+
- lib/i18n/tasks/scanners/ast_matchers/default_i18n_subject_matcher.rb
|
409
410
|
- lib/i18n/tasks/scanners/ast_matchers/message_receivers_matcher.rb
|
410
411
|
- lib/i18n/tasks/scanners/ast_matchers/rails_model_matcher.rb
|
411
|
-
- lib/i18n/tasks/scanners/erb_ast_processor.rb
|
412
412
|
- lib/i18n/tasks/scanners/erb_ast_scanner.rb
|
413
413
|
- lib/i18n/tasks/scanners/file_scanner.rb
|
414
414
|
- lib/i18n/tasks/scanners/files/caching_file_finder.rb
|
@@ -421,12 +421,17 @@ files:
|
|
421
421
|
- lib/i18n/tasks/scanners/pattern_mapper.rb
|
422
422
|
- lib/i18n/tasks/scanners/pattern_scanner.rb
|
423
423
|
- lib/i18n/tasks/scanners/pattern_with_scope_scanner.rb
|
424
|
+
- lib/i18n/tasks/scanners/prism_scanner.rb
|
425
|
+
- lib/i18n/tasks/scanners/prism_scanners/arguments_visitor.rb
|
426
|
+
- lib/i18n/tasks/scanners/prism_scanners/nodes.rb
|
427
|
+
- lib/i18n/tasks/scanners/prism_scanners/visitor.rb
|
424
428
|
- lib/i18n/tasks/scanners/relative_keys.rb
|
425
429
|
- lib/i18n/tasks/scanners/results/key_occurrences.rb
|
426
430
|
- lib/i18n/tasks/scanners/results/occurrence.rb
|
427
431
|
- lib/i18n/tasks/scanners/ruby_ast_call_finder.rb
|
428
432
|
- lib/i18n/tasks/scanners/ruby_ast_scanner.rb
|
429
433
|
- lib/i18n/tasks/scanners/ruby_key_literals.rb
|
434
|
+
- lib/i18n/tasks/scanners/ruby_parser_factory.rb
|
430
435
|
- lib/i18n/tasks/scanners/scanner.rb
|
431
436
|
- lib/i18n/tasks/scanners/scanner_multiplexer.rb
|
432
437
|
- lib/i18n/tasks/split_key.rb
|
@@ -437,6 +442,7 @@ files:
|
|
437
442
|
- lib/i18n/tasks/translators/deepl_translator.rb
|
438
443
|
- lib/i18n/tasks/translators/google_translator.rb
|
439
444
|
- lib/i18n/tasks/translators/openai_translator.rb
|
445
|
+
- lib/i18n/tasks/translators/watsonx_translator.rb
|
440
446
|
- lib/i18n/tasks/translators/yandex_translator.rb
|
441
447
|
- lib/i18n/tasks/unused_keys.rb
|
442
448
|
- lib/i18n/tasks/used_keys.rb
|
@@ -448,8 +454,10 @@ homepage: https://github.com/glebm/i18n-tasks
|
|
448
454
|
licenses:
|
449
455
|
- MIT
|
450
456
|
metadata:
|
457
|
+
changelog_uri: https://github.com/glebm/i18n-tasks/blob/main/CHANGES.md
|
451
458
|
issue_tracker: https://github.com/glebm/i18n-tasks
|
452
459
|
rubygems_mfa_required: 'true'
|
460
|
+
source_code_uri: https://github.com/glebm/i18n-tasks
|
453
461
|
post_install_message: |
|
454
462
|
# Install default configuration:
|
455
463
|
cp $(bundle exec i18n-tasks gem-path)/templates/config/i18n-tasks.yml config/
|
@@ -474,8 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
474
482
|
- !ruby/object:Gem::Version
|
475
483
|
version: '0'
|
476
484
|
requirements: []
|
477
|
-
rubygems_version: 3.
|
478
|
-
signing_key:
|
485
|
+
rubygems_version: 3.6.3
|
479
486
|
specification_version: 4
|
480
487
|
summary: Manage localization and translation with the awesome power of static analysis
|
481
488
|
test_files: []
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'ast'
|
4
|
-
require 'set'
|
5
|
-
require 'i18n/tasks/scanners/local_ruby_parser'
|
6
|
-
|
7
|
-
module I18n::Tasks::Scanners
|
8
|
-
class ErbAstProcessor
|
9
|
-
include AST::Processor::Mixin
|
10
|
-
def initialize
|
11
|
-
super()
|
12
|
-
@ruby_parser = LocalRubyParser.new(ignore_blocks: true)
|
13
|
-
@comments = []
|
14
|
-
end
|
15
|
-
|
16
|
-
def process_and_extract_comments(ast)
|
17
|
-
result = process(ast)
|
18
|
-
[result, @comments]
|
19
|
-
end
|
20
|
-
|
21
|
-
def on_code(node)
|
22
|
-
parsed, comments = @ruby_parser.parse(
|
23
|
-
node.children[0],
|
24
|
-
location: node.location
|
25
|
-
)
|
26
|
-
@comments.concat(comments)
|
27
|
-
|
28
|
-
unless parsed.nil?
|
29
|
-
parsed = parsed.updated(
|
30
|
-
nil,
|
31
|
-
parsed.children.map { |child| node?(child) ? process(child) : child }
|
32
|
-
)
|
33
|
-
node = node.updated(:send, parsed)
|
34
|
-
end
|
35
|
-
node
|
36
|
-
end
|
37
|
-
|
38
|
-
# @param node [::Parser::AST::Node]
|
39
|
-
# @return [::Parser::AST::Node]
|
40
|
-
def handler_missing(node)
|
41
|
-
node = handle_comment(node)
|
42
|
-
return if node.nil?
|
43
|
-
|
44
|
-
node.updated(
|
45
|
-
nil,
|
46
|
-
node.children.map { |child| node?(child) ? process(child) : child }
|
47
|
-
)
|
48
|
-
end
|
49
|
-
|
50
|
-
private
|
51
|
-
|
52
|
-
# Convert ERB-comments to ::Parser::Source::Comment and skip processing node
|
53
|
-
#
|
54
|
-
# @param node Parser::AST::Node Potential comment node
|
55
|
-
# @return Parser::AST::Node or nil
|
56
|
-
def handle_comment(node)
|
57
|
-
if node.type == :erb && node.children.size == 4 &&
|
58
|
-
node.children[0]&.type == :indicator && node.children[0].children[0] == '#' &&
|
59
|
-
node.children[2]&.type == :code
|
60
|
-
|
61
|
-
# Do not continue parsing this node
|
62
|
-
comment = node.children[2]
|
63
|
-
@comments << ::Parser::Source::Comment.new(comment.location.expression)
|
64
|
-
return
|
65
|
-
end
|
66
|
-
|
67
|
-
node
|
68
|
-
end
|
69
|
-
|
70
|
-
def node?(node)
|
71
|
-
node.is_a?(::Parser::AST::Node)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|