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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +125 -38
  3. data/config/locales/en.yml +14 -5
  4. data/config/locales/ru.yml +14 -5
  5. data/i18n-tasks.gemspec +4 -2
  6. data/lib/i18n/tasks/command/commands/data.rb +14 -0
  7. data/lib/i18n/tasks/command/commands/missing.rb +3 -1
  8. data/lib/i18n/tasks/command/option_parsers/enum.rb +4 -3
  9. data/lib/i18n/tasks/command/options/common.rb +1 -1
  10. data/lib/i18n/tasks/command/options/locales.rb +12 -3
  11. data/lib/i18n/tasks/configuration.rb +8 -2
  12. data/lib/i18n/tasks/data/file_system_base.rb +5 -0
  13. data/lib/i18n/tasks/data/router/isolating_router.rb +146 -0
  14. data/lib/i18n/tasks/data/tree/siblings.rb +2 -2
  15. data/lib/i18n/tasks/interpolations.rb +1 -1
  16. data/lib/i18n/tasks/key_pattern_matching.rb +4 -4
  17. data/lib/i18n/tasks/reports/terminal.rb +6 -0
  18. data/lib/i18n/tasks/scanners/ast_matchers/default_i18n_subject_matcher.rb +26 -0
  19. data/lib/i18n/tasks/scanners/ast_matchers/rails_model_matcher.rb +1 -1
  20. data/lib/i18n/tasks/scanners/erb_ast_scanner.rb +55 -25
  21. data/lib/i18n/tasks/scanners/local_ruby_parser.rb +2 -2
  22. data/lib/i18n/tasks/scanners/pattern_scanner.rb +1 -1
  23. data/lib/i18n/tasks/scanners/prism_scanner.rb +83 -0
  24. data/lib/i18n/tasks/scanners/prism_scanners/arguments_visitor.rb +41 -0
  25. data/lib/i18n/tasks/scanners/prism_scanners/nodes.rb +334 -0
  26. data/lib/i18n/tasks/scanners/prism_scanners/visitor.rb +273 -0
  27. data/lib/i18n/tasks/scanners/relative_keys.rb +1 -1
  28. data/lib/i18n/tasks/scanners/ruby_ast_scanner.rb +5 -4
  29. data/lib/i18n/tasks/scanners/ruby_key_literals.rb +1 -1
  30. data/lib/i18n/tasks/scanners/ruby_parser_factory.rb +27 -0
  31. data/lib/i18n/tasks/split_key.rb +30 -47
  32. data/lib/i18n/tasks/translation.rb +4 -1
  33. data/lib/i18n/tasks/translators/base_translator.rb +11 -1
  34. data/lib/i18n/tasks/translators/deepl_translator.rb +32 -1
  35. data/lib/i18n/tasks/translators/google_translator.rb +35 -12
  36. data/lib/i18n/tasks/translators/openai_translator.rb +55 -23
  37. data/lib/i18n/tasks/translators/watsonx_translator.rb +155 -0
  38. data/lib/i18n/tasks/translators/yandex_translator.rb +5 -1
  39. data/lib/i18n/tasks/used_keys.rb +1 -0
  40. data/lib/i18n/tasks/version.rb +1 -1
  41. data/lib/i18n/tasks.rb +1 -0
  42. data/templates/config/i18n-tasks.yml +26 -3
  43. metadata +33 -26
  44. 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.13
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: 2023-10-14 00:00:00.000000000 Z
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.2.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