i18n-tasks 0.6.3 → 0.7.0
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/.travis.yml +3 -0
- data/Gemfile +2 -1
- data/README.md +80 -78
- data/bin/i18n-tasks +24 -30
- data/config/i18n-tasks.yml +87 -0
- data/config/locales/en.yml +95 -0
- data/i18n-tasks.gemspec +1 -0
- data/lib/i18n/tasks.rb +10 -0
- data/lib/i18n/tasks/base_task.rb +6 -2
- data/lib/i18n/tasks/command/collection.rb +18 -0
- data/lib/i18n/tasks/command/commander.rb +72 -0
- data/lib/i18n/tasks/command/commands/data.rb +73 -0
- data/lib/i18n/tasks/command/commands/eq_base.rb +20 -0
- data/lib/i18n/tasks/command/commands/health.rb +26 -0
- data/lib/i18n/tasks/command/commands/meta.rb +35 -0
- data/lib/i18n/tasks/command/commands/missing.rb +73 -0
- data/lib/i18n/tasks/command/commands/tree.rb +92 -0
- data/lib/i18n/tasks/command/commands/usages.rb +70 -0
- data/lib/i18n/tasks/command/commands/xlsx.rb +27 -0
- data/lib/i18n/tasks/command/dsl.rb +27 -0
- data/lib/i18n/tasks/command/dsl/cmd.rb +19 -0
- data/lib/i18n/tasks/command/dsl/cmd_opt.rb +19 -0
- data/lib/i18n/tasks/command/dsl/enum_opt.rb +26 -0
- data/lib/i18n/tasks/command/options/common.rb +48 -0
- data/lib/i18n/tasks/command/options/enum_opt.rb +44 -0
- data/lib/i18n/tasks/command/options/list_opt.rb +11 -0
- data/lib/i18n/tasks/command/options/locales.rb +47 -0
- data/lib/i18n/tasks/command/options/trees.rb +101 -0
- data/lib/i18n/tasks/command_error.rb +3 -0
- data/lib/i18n/tasks/commands.rb +22 -169
- data/lib/i18n/tasks/configuration.rb +1 -16
- data/lib/i18n/tasks/console_context.rb +1 -1
- data/lib/i18n/tasks/data.rb +13 -8
- data/lib/i18n/tasks/data/file_formats.rb +29 -18
- data/lib/i18n/tasks/data/file_system_base.rb +35 -4
- data/lib/i18n/tasks/data/router/conservative_router.rb +18 -11
- data/lib/i18n/tasks/data/tree/node.rb +5 -15
- data/lib/i18n/tasks/data/tree/nodes.rb +0 -3
- data/lib/i18n/tasks/data/tree/siblings.rb +32 -2
- data/lib/i18n/tasks/data/tree/traversal.rb +117 -96
- data/lib/i18n/tasks/google_translation.rb +25 -25
- data/lib/i18n/tasks/html_keys.rb +10 -0
- data/lib/i18n/tasks/key_pattern_matching.rb +1 -0
- data/lib/i18n/tasks/locale_list.rb +19 -0
- data/lib/i18n/tasks/missing_keys.rb +32 -33
- data/lib/i18n/tasks/plural_keys.rb +1 -1
- data/lib/i18n/tasks/reports/base.rb +4 -9
- data/lib/i18n/tasks/reports/spreadsheet.rb +5 -5
- data/lib/i18n/tasks/reports/terminal.rb +62 -38
- data/lib/i18n/tasks/scanners/base_scanner.rb +5 -4
- data/lib/i18n/tasks/slop_command.rb +27 -0
- data/lib/i18n/tasks/stats.rb +20 -0
- data/lib/i18n/tasks/string_interpolation.rb +14 -0
- data/lib/i18n/tasks/unused_keys.rb +0 -10
- data/lib/i18n/tasks/version.rb +1 -1
- data/spec/commands/data_commands_spec.rb +38 -0
- data/spec/commands/tree_commands_spec.rb +68 -0
- data/spec/fixtures/app/views/index.html.slim +1 -0
- data/spec/google_translate_spec.rb +5 -3
- data/spec/i18n_spec.rb +18 -0
- data/spec/i18n_tasks_spec.rb +8 -8
- data/spec/spec_helper.rb +3 -3
- data/spec/support/test_codebase.rb +4 -1
- data/spec/used_keys_spec.rb +7 -7
- data/templates/config/i18n-tasks.yml +2 -2
- metadata +48 -4
- data/lib/i18n/tasks/commands_base.rb +0 -107
- data/lib/i18n/tasks/fill_tasks.rb +0 -40
@@ -1,107 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require 'ostruct'
|
3
|
-
require 'set'
|
4
|
-
module I18n::Tasks
|
5
|
-
class CommandsBase
|
6
|
-
include ::I18n::Tasks::Logging
|
7
|
-
|
8
|
-
def initialize(i18n = nil)
|
9
|
-
@i18n = i18n
|
10
|
-
end
|
11
|
-
|
12
|
-
def locales_opt(locales)
|
13
|
-
return i18n.locales if locales == ['all'] || locales == 'all'
|
14
|
-
if locales.present?
|
15
|
-
locales = Array(locales).map { |v| v.strip.split(/\s*[\+,:]\s*/).compact.presence if v.is_a?(String) }.flatten
|
16
|
-
locales = locales.map(&:presence).compact.map { |v| v == 'base' ? base_locale : v }
|
17
|
-
locales
|
18
|
-
else
|
19
|
-
i18n.locales
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
VALID_LOCALE_RE = /\A\w[\w\-_\.]*\z/i
|
24
|
-
def parse_locales!(opt)
|
25
|
-
opt[:locales] = locales_opt(opt[:arguments].presence || opt[:locales]).tap do |locales|
|
26
|
-
locales.each do |locale|
|
27
|
-
raise CommandError.new("Invalid locale: #{locale}") if VALID_LOCALE_RE !~ locale
|
28
|
-
end
|
29
|
-
log_verbose "locales for the command are #{locales.inspect}"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
VALID_TREE_FORMATS = %w(terminal-table yaml json keys inspect)
|
35
|
-
|
36
|
-
def print_locale_tree(tree, opt, version = :show_tree)
|
37
|
-
format = opt[:format] || VALID_TREE_FORMATS.first
|
38
|
-
raise CommandError.new("unknown format: #{format}. Valid formats are: #{VALID_TREE_FORMATS * ', '}.") unless VALID_TREE_FORMATS.include?(format)
|
39
|
-
case format
|
40
|
-
when 'terminal-table'
|
41
|
-
terminal_report.send(version, tree)
|
42
|
-
when 'inspect'
|
43
|
-
puts tree.inspect
|
44
|
-
when 'keys'
|
45
|
-
puts tree.key_names(root: true)
|
46
|
-
when *i18n.data.adapter_names.map(&:to_s)
|
47
|
-
puts i18n.data.adapter_dump tree, i18n.data.adapter_by_name(format)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
protected
|
52
|
-
|
53
|
-
def terminal_report
|
54
|
-
@terminal_report ||= I18n::Tasks::Reports::Terminal.new(i18n)
|
55
|
-
end
|
56
|
-
|
57
|
-
def spreadsheet_report
|
58
|
-
@spreadsheet_report ||= I18n::Tasks::Reports::Spreadsheet.new(i18n)
|
59
|
-
end
|
60
|
-
|
61
|
-
class << self
|
62
|
-
def cmds
|
63
|
-
@cmds ||= {}.with_indifferent_access
|
64
|
-
end
|
65
|
-
|
66
|
-
def cmd(name, &block)
|
67
|
-
cmds[name] = OpenStruct.new(@next_def)
|
68
|
-
@next_def = {}
|
69
|
-
define_method name do |*args|
|
70
|
-
begin
|
71
|
-
coloring_was = Term::ANSIColor.coloring?
|
72
|
-
Term::ANSIColor.coloring = ENV['I18N_TASKS_COLOR'] || STDOUT.isatty
|
73
|
-
instance_exec *args, &block
|
74
|
-
rescue CommandError => e
|
75
|
-
log_error e.message
|
76
|
-
exit 78
|
77
|
-
ensure
|
78
|
-
Term::ANSIColor.coloring = coloring_was
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def desc(text)
|
84
|
-
next_def[:desc] = text
|
85
|
-
end
|
86
|
-
|
87
|
-
def opts(&block)
|
88
|
-
next_def[:opts] = block
|
89
|
-
end
|
90
|
-
|
91
|
-
private
|
92
|
-
def next_def
|
93
|
-
@next_def ||= {}
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def desc(name)
|
98
|
-
self.class.cmds.try(:[], name).try(:desc)
|
99
|
-
end
|
100
|
-
|
101
|
-
def i18n
|
102
|
-
@i18n ||= I18n::Tasks::BaseTask.new
|
103
|
-
end
|
104
|
-
|
105
|
-
delegate :base_locale, :t, to: :i18n
|
106
|
-
end
|
107
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
module I18n::Tasks
|
3
|
-
module FillTasks
|
4
|
-
def fill_missing_value(opts = {})
|
5
|
-
value = opts[:value] || ''
|
6
|
-
base = opts[:base_locale] || base_locale
|
7
|
-
locales_for_update(opts).each do |locale|
|
8
|
-
m = missing_keys(locales: [locale], base_locale: base).keys { |key, node|
|
9
|
-
node.value = value.respond_to?(:call) ? value.call(key, locale, node) : value
|
10
|
-
if node.data.key?(:path)
|
11
|
-
# set path hint for the router
|
12
|
-
node.data.update path: LocalePathname.replace_locale(node.data[:path], node.data[:locale], locale), locale: locale
|
13
|
-
end
|
14
|
-
}
|
15
|
-
data[locale] = data[locale].merge! m
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def fill_missing_google_translate(opts = {})
|
20
|
-
from = opts[:from] || base_locale
|
21
|
-
locales = (Array(opts[:locales]).presence || self.locales) - [from]
|
22
|
-
locales.each do |locale|
|
23
|
-
keys = missing_tree(locale, from, false).key_names.map(&:to_s)
|
24
|
-
values = google_translate(keys.zip(keys.map(&t_proc(from))), to: locale, from: from).map(&:last)
|
25
|
-
|
26
|
-
data[locale] = data[locale].merge! Data::Tree::Node.new(
|
27
|
-
key: locale,
|
28
|
-
children: Data::Tree::Siblings.from_flat_pairs(keys.zip(values))
|
29
|
-
).to_siblings
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def locales_for_update(opts)
|
34
|
-
locales = (Array(opts[:locales] || opts[:locale]).presence || self.locales).map(&:to_s)
|
35
|
-
# make sure base_locale always comes first if present
|
36
|
-
locales = [base_locale] + (locales - [base_locale]) if locales.include?(base_locale)
|
37
|
-
locales
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|