i18n-tasks 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +9 -0
  3. data/README.md +46 -36
  4. data/Rakefile +2 -2
  5. data/lib/i18n/tasks/base_task.rb +2 -0
  6. data/lib/i18n/tasks/commands.rb +55 -35
  7. data/lib/i18n/tasks/commands_base.rb +36 -9
  8. data/lib/i18n/tasks/configuration.rb +14 -13
  9. data/lib/i18n/tasks/console_context.rb +0 -1
  10. data/lib/i18n/tasks/data.rb +2 -2
  11. data/lib/i18n/tasks/data/adapter/json_adapter.rb +6 -2
  12. data/lib/i18n/tasks/data/file_formats.rb +19 -4
  13. data/lib/i18n/tasks/data/file_system_base.rb +1 -1
  14. data/lib/i18n/tasks/data/tree/node.rb +11 -37
  15. data/lib/i18n/tasks/data/tree/nodes.rb +6 -2
  16. data/lib/i18n/tasks/data/tree/siblings.rb +53 -29
  17. data/lib/i18n/tasks/data/tree/traversal.rb +4 -2
  18. data/lib/i18n/tasks/fill_tasks.rb +5 -2
  19. data/lib/i18n/tasks/ignore_keys.rb +1 -1
  20. data/lib/i18n/tasks/locale_pathname.rb +1 -1
  21. data/lib/i18n/tasks/logging.rb +2 -0
  22. data/lib/i18n/tasks/missing_keys.rb +74 -31
  23. data/lib/i18n/tasks/plural_keys.rb +4 -3
  24. data/lib/i18n/tasks/reports/base.rb +8 -5
  25. data/lib/i18n/tasks/reports/spreadsheet.rb +15 -3
  26. data/lib/i18n/tasks/reports/terminal.rb +62 -23
  27. data/lib/i18n/tasks/scanners/base_scanner.rb +4 -2
  28. data/lib/i18n/tasks/scanners/relative_keys.rb +21 -0
  29. data/lib/i18n/tasks/split_key.rb +39 -0
  30. data/lib/i18n/tasks/used_keys.rb +1 -1
  31. data/lib/i18n/tasks/version.rb +1 -1
  32. data/spec/fixtures/app/views/index.html.slim +2 -0
  33. data/spec/i18n_tasks_spec.rb +19 -5
  34. data/spec/locale_pathname_spec.rb +24 -0
  35. data/spec/locale_tree/siblings_spec.rb +41 -4
  36. data/spec/split_key_spec.rb +27 -0
  37. data/spec/support/i18n_tasks_output_matcher.rb +7 -13
  38. data/spec/support/trees.rb +4 -0
  39. data/templates/config/i18n-tasks.yml +82 -0
  40. data/templates/rspec/i18n_spec.rb +18 -0
  41. metadata +10 -3
  42. data/lib/i18n/tasks/relative_keys.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6579b9cbd049e1fa2d48871a7ca13f7fd8ad96a4
4
- data.tar.gz: eaa10ec60b66db271f1c3f25f7369d4c0ba6e36e
3
+ metadata.gz: 03263ddf669098e8580e4656d41e7b15d2ba5721
4
+ data.tar.gz: ae4bcf9dee99a2e6cb19e6ee2d52cc34b281e335
5
5
  SHA512:
6
- metadata.gz: 1119961b325f1bf1f678b42304ed9669f4c8800a865f257a09817ceff1d5bfc69038ebf6ec8932e4833e90fea3b969574b2d3a0315245981a3f230793ae4665c
7
- data.tar.gz: 3c69f7d4e2f8edde4dd4407f6e18085fd4d8318565bc366ec1f39288465f345466fd5da8967f9ed279d35f089f75236710f73f0a45cf41e88d9e6cfaf8eaa909
6
+ metadata.gz: 69aff7e4e6369e2fe1c622255bfda9290a3141eeb28be0fa368af1be3f568e1934d65ee77e66d180025bd2c9279ca4a0aff73e7135fa21b538b1a00941e26540
7
+ data.tar.gz: e21ca15833a7a7822ce166599863e3d6184cdc7a9535740554cf7e7b29a10e7c013cb34a3be4b54d6a8be4a5d53fb18a1038a9d3a2ce4bbeef06664e2d5f8a1e
data/CHANGES.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.6.0
2
+
3
+ * New output format options for reports: yaml, json, and inspect.
4
+ * Templates for config and rspec.
5
+ * Keys with values same as base locale have been moved from `missing` into a separate task, `eq-base`.
6
+ * `missing` now also shows keys that are present in some locale but not in base locale.
7
+ * Terminal output: no more Type column in `missing`, first code usage shown for keys missing base value.
8
+ * `relative_roots` configuration key moved to `search.relative_roots`, deprecation warning (removed in the next minor).
9
+
1
10
  ## 0.5.4
2
11
 
3
12
  * ActiveSupport 3 compatibility
data/README.md CHANGED
@@ -18,7 +18,7 @@ i18n-tasks can be used with any project using [i18n][i18n-gem] (default in Rails
18
18
  Add to Gemfile:
19
19
 
20
20
  ```ruby
21
- gem 'i18n-tasks', '~> 0.5.4'
21
+ gem 'i18n-tasks', '~> 0.6.0'
22
22
  ```
23
23
 
24
24
 
@@ -36,14 +36,16 @@ Available commands:
36
36
 
37
37
  missing show missing translations
38
38
  unused show unused translations
39
+ eq-base show translations equal to base value
40
+ find show where the keys are used in the code
39
41
  translate-missing translate missing keys with Google Translate
40
42
  add-missing add missing keys to the locales
41
- find show where the keys are used in the code
42
43
  normalize normalize translation data: sort and move to the right files
43
44
  remove-unused remove unused keys
44
45
  config display i18n-tasks configuration
45
46
  xlsx-report save missing and unused translations to an Excel file
46
- irb irb session within i18n-tasks context
47
+ irb REPL session within i18n-tasks context
48
+ gem-path show path to the gem
47
49
 
48
50
  See `<command> --help` for more information on a specific command.
49
51
  ```
@@ -122,11 +124,10 @@ Translation data storage, key usage search, and other [settings](#configuration)
122
124
  Configuration is read from `config/i18n-tasks.yml` or `config/i18n-tasks.yml.erb`.
123
125
  Inspect configuration with `i18n-tasks config`.
124
126
 
127
+ Install the default config file with:
125
128
 
126
- You can generate a config file with:
127
-
128
- ```ruby
129
- i18n-tasks config > config/i18n-tasks.yml
129
+ ```bash
130
+ cp $(i18n-tasks gem-path)/templates/config/i18n-tasks.yml spec/
130
131
  ```
131
132
 
132
133
  ### Locales
@@ -239,6 +240,12 @@ search:
239
240
  paths:
240
241
  - 'app/'
241
242
  - 'vendor/'
243
+ # paths for relative key resolution:
244
+ relative_roots:
245
+ # default:
246
+ - app/views
247
+ # add a custom one:
248
+ - app/views-mobile
242
249
  # include only files matching this glob pattern (default: blank = include all files)
243
250
  include:
244
251
  - '*.rb'
@@ -254,18 +261,6 @@ search:
254
261
  - "^\\s*[#/](?!\\si18n-tasks-use)"
255
262
  ```
256
263
 
257
- To configure paths for relative key resolution:
258
-
259
- ```yaml
260
- # config/i18n-tasks.yml
261
- # directories containing relative keys
262
- relative_roots:
263
- # default:
264
- - app/views
265
- # add a custom one:
266
- - app/views-mobile
267
- ```
268
-
269
264
  It is also possible to use a custom key usage scanner by setting `search.scanner` to a class name.
270
265
  See this basic [pattern scanner](/lib/i18n/tasks/scanners/pattern_scanner.rb) for reference.
271
266
 
@@ -320,25 +315,12 @@ translation:
320
315
  ## RSpec integration
321
316
 
322
317
  You might want to test for missing and unused translations as part of your test suite.
323
- This is how you can do it with rspec:
324
-
325
- ```ruby
326
- # spec/i18n_spec.rb:
327
- require 'spec_helper'
328
- require 'i18n/tasks'
318
+ Install the spec file:
329
319
 
330
- describe 'I18n' do
331
- let(:i18n) { I18n::Tasks::BaseTask.new }
332
-
333
- it 'does not have missing keys' do
334
- expect(i18n.missing_keys).to be_empty
335
- end
336
-
337
- it 'does not have unused keys' do
338
- expect(i18n.unused_keys).to be_empty
339
- end
340
- end
320
+ ```bash
321
+ cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/
341
322
  ```
323
+
342
324
  ### XLSX
343
325
 
344
326
  Export missing and unused data to XLSX:
@@ -351,6 +333,34 @@ i18n-tasks xlsx-report
351
333
 
352
334
  While i18n-tasks does not provide an HTML version of the report, you can add [one like this](https://gist.github.com/glebm/bdd3ab6d12d915f0c81b).
353
335
 
336
+
337
+ ## Add New Tasks
338
+
339
+ Tasks that come with the gem are defined in [lib/i18n/tasks/commands.rb](lib/i18n/tasks/commands.rb).
340
+
341
+ You can add a new task by re-opening the class and loading it in i18n-tasks.yml:
342
+
343
+ ```ruby
344
+ # lib/i18n/tasks/my_task.rb
345
+ I18n::Tasks::Commands.class_eval do
346
+ desc 'my task'
347
+ cmd :my_task do |opts = {}|
348
+ puts i18n.data[opts[:arguments].try(:first) || base_locale]
349
+ end
350
+ end
351
+ ```
352
+
353
+ ```yaml
354
+ # config/i18n-tasks.yml
355
+ <% require 'i18n/tasks/my_task' %>
356
+ ```
357
+
358
+ Run with:
359
+
360
+ ```console
361
+ $ i18n-tasks my-task
362
+ ```
363
+
354
364
  [MIT license]: /LICENSE.txt
355
365
  [travis]: https://travis-ci.org/glebm/i18n-tasks
356
366
  [badge-travis]: http://img.shields.io/travis/glebm/i18n-tasks.svg
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
- RSpec::Core::RakeTask.new(:spec)
4
- task :default => :spec
3
+ RSpec::Core::RakeTask.new(:rspec)
4
+ task :default => :rspec
5
5
 
6
6
  task :irb do
7
7
  # $: << File.expand_path('lib', __FILE__)
@@ -1,5 +1,6 @@
1
1
  # coding: utf-8
2
2
  require 'i18n/tasks/command_error'
3
+ require 'i18n/tasks/split_key'
3
4
  require 'i18n/tasks/key_pattern_matching'
4
5
  require 'i18n/tasks/logging'
5
6
  require 'i18n/tasks/plural_keys'
@@ -16,6 +17,7 @@ require 'i18n/tasks/configuration'
16
17
  module I18n
17
18
  module Tasks
18
19
  class BaseTask
20
+ include SplitKey
19
21
  include KeyPatternMatching
20
22
  include PluralKeys
21
23
  include UsedKeys
@@ -9,91 +9,116 @@ module I18n::Tasks
9
9
  require 'highline/import'
10
10
 
11
11
  on_locale_opt = { as: Array, delimiter: /[+:,]/, default: 'all', argument: true, optional: false }
12
+ OPT = {
13
+ locale: proc {
14
+ on '-l', :locales=,
15
+ 'Filter by locale(s), comma-separated list (e.g. en,fr) or all (default: all), also accepted as arguments without -l',
16
+ on_locale_opt
17
+ },
18
+ format: proc {
19
+ on '-f', :format=,
20
+ 'Format: terminal-table, terminal-tree, json, yaml. Default: terminal-table.',
21
+ {default: 'terminal-table', argument: true, optional: false}
22
+ }
23
+ }
12
24
  desc 'show missing translations'
13
25
  opts do
14
- on '-l', :locales=, 'Filter by locale (default: all)', on_locale_opt
15
- on '-t', :types=, 'Filter by type (types: missing_from_base, eq_base, missing_from_locale)', as: Array, delimiter: /[+:,]/
26
+ instance_exec &OPT[:locale]
27
+ instance_exec &OPT[:format]
28
+ on '-t', :types=, 'Filter by type (types: used, diff)', as: Array, delimiter: /[+:,]/
16
29
  end
17
30
  cmd :missing do |opt = {}|
18
31
  parse_locales! opt
19
- terminal_report.missing_keys i18n_task.missing_keys(opt)
32
+ print_locale_tree i18n.missing_keys(opt), opt, :missing_keys
20
33
  end
21
34
 
22
35
  desc 'show unused translations'
23
36
  opts do
24
- on '-l', :locales=, 'Filter by locale (default: all)', on_locale_opt
37
+ instance_exec &OPT[:locale]
38
+ instance_exec &OPT[:format]
25
39
  end
26
40
  cmd :unused do |opt = {}|
27
41
  parse_locales! opt
28
- terminal_report.unused_keys i18n_task.unused_keys(opt)
42
+ print_locale_tree i18n.unused_keys(opt), opt, :unused_keys
43
+ end
44
+
45
+ desc 'show translations equal to base value'
46
+ opts do
47
+ instance_exec &OPT[:format]
48
+ end
49
+ cmd :eq_base do |opt = {}|
50
+ parse_locales! opt
51
+ print_locale_tree i18n.eq_base_keys(opt), opt, :eq_base_keys
52
+ end
53
+
54
+ desc 'show where the keys are used in the code'
55
+ opts do
56
+ on '-p', :pattern=, 'Show only keys matching pattern', argument: true, optional: false
57
+ instance_exec &OPT[:format]
58
+ end
59
+ cmd :find do |opt = {}|
60
+ opt[:filter] ||= opt.delete(:pattern) || opt[:arguments].try(:first)
61
+ print_locale_tree i18n.used_tree(key_filter: opt[:filter].presence, source_locations: true), opt, :used_keys
29
62
  end
30
63
 
64
+
31
65
  desc 'translate missing keys with Google Translate'
32
66
  opts do
33
- on '-l', :locales=, 'Locales to translate (default: all)', on_locale_opt
67
+ on '-l', :locales=, 'Locales to translate (comma-separated, default: all)', on_locale_opt
34
68
  on '-f', :from=, 'Locale to translate from (default: base)', default: 'base', argument: true, optional: false
35
69
  end
36
70
  cmd :translate_missing do |opt = {}|
37
71
  opt[:from] = base_locale if opt[:from].blank? || opt[:from] == 'base'
38
72
  parse_locales! opt
39
- i18n_task.fill_missing_google_translate opt
73
+ i18n.fill_missing_google_translate opt
40
74
  end
41
75
 
42
76
  desc 'add missing keys to the locales'
43
77
  opts do
44
- on '-l', :locales=, 'Locales to add keys into (default: all)', on_locale_opt
78
+ on '-l', :locales=, 'Locales to add keys into (comma-separated, default: all)', on_locale_opt
45
79
  on '-p', :placeholder=, 'Value for empty keys (default: base value or key.humanize)', argument: true, optional: false
46
80
  end
47
81
  cmd :add_missing do |opt = {}|
48
82
  parse_locales! opt
49
83
  opt[:value] ||= opt.delete(:placeholder) || proc { |key, locale|
50
84
  # default to base value or key.humanize
51
- locale != base_locale && t(key, base_locale) || key.split('.').last.to_s.humanize
85
+ locale != base_locale && t(key, base_locale) || SplitKey.split_key(key).last.to_s.humanize
52
86
  }
53
87
 
54
88
  v = opt[:value]
55
89
  if v.is_a?(String) && v.include?('%{base_value}')
56
- opt[:value] = proc { |key, locale|
57
- base_value = t(key, base_locale) || ''
90
+ opt[:value] = proc { |key, locale, node|
91
+ base_value = node.value || t(key, base_locale) || ''
58
92
  v % {base_value: base_value}
59
93
  }
60
94
  end
61
95
 
62
- i18n_task.fill_missing_value opt
63
- end
64
-
65
- desc 'show where the keys are used in the code'
66
- opts do
67
- on '-p', :pattern=, 'Show only keys matching pattern', argument: true, optional: false
68
- end
69
- cmd :find do |opt = {}|
70
- opt[:filter] ||= opt.delete(:pattern) || opt[:arguments].try(:first)
71
- terminal_report.used_keys i18n_task.used_tree(key_filter: opt[:filter].presence, source_locations: true)
96
+ i18n.fill_missing_value opt
72
97
  end
73
98
 
74
99
  desc 'normalize translation data: sort and move to the right files'
75
100
  opts do
76
- on '-l', :locales=, 'Locales to normalize (default: all)', on_locale_opt
101
+ on '-l', :locales=, 'Locales to normalize (comma-separated, default: all)', on_locale_opt
77
102
  on '-p', :pattern_router, 'Use pattern router, regardless of config.', argument: false, optional: true
78
103
  end
79
104
  cmd :normalize do |opt = {}|
80
105
  parse_locales! opt
81
- i18n_task.normalize_store! opt[:locales], opt[:pattern_router]
106
+ i18n.normalize_store! opt[:locales], opt[:pattern_router]
82
107
  end
83
108
 
84
109
  desc 'remove unused keys'
85
110
  opts do
86
- on '-l', :locales=, 'Locales to remove unused keys from (default: all)', on_locale_opt
111
+ on '-l', :locales=, 'Locales to remove unused keys from (comma-separated, default: all)', on_locale_opt
87
112
  end
88
113
  cmd :remove_unused do |opt = {}|
89
114
  parse_locales! opt
90
- unused_keys = i18n_task.unused_keys(opt)
115
+ unused_keys = i18n.unused_keys(opt)
91
116
  if unused_keys.present?
92
117
  terminal_report.unused_keys(unused_keys)
93
118
  unless ENV['CONFIRM']
94
119
  exit 1 unless agree(red "#{unused_keys.leaves.count} translations will be removed in #{bold opt[:locales] * ', '}#{red '.'} " + yellow('Continue? (yes/no)') + ' ')
95
120
  end
96
- i18n_task.remove_unused!(opt[:locales])
121
+ i18n.remove_unused!(opt[:locales])
97
122
  $stderr.puts "Removed #{unused_keys.leaves.count} keys"
98
123
  else
99
124
  $stderr.puts bold green 'No unused keys to remove'
@@ -102,7 +127,7 @@ module I18n::Tasks
102
127
 
103
128
  desc 'display i18n-tasks configuration'
104
129
  cmd :config do
105
- cfg = i18n_task.config_for_inspect.to_yaml
130
+ cfg = i18n.config_for_inspect.to_yaml
106
131
  cfg.sub! /\A---\n/, ''
107
132
  cfg.gsub! /^([^\s-].+?:)/, Term::ANSIColor.cyan(Term::ANSIColor.bold('\1'))
108
133
  puts cfg
@@ -129,14 +154,9 @@ module I18n::Tasks
129
154
  ::I18n::Tasks::ConsoleContext.start
130
155
  end
131
156
 
132
- protected
133
-
134
- def terminal_report
135
- @terminal_report ||= I18n::Tasks::Reports::Terminal.new(i18n_task)
136
- end
137
-
138
- def spreadsheet_report
139
- @spreadsheet_report ||= I18n::Tasks::Reports::Spreadsheet.new(i18n_task)
157
+ desc 'show path to the gem'
158
+ cmd :gem_path do
159
+ puts File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..'))
140
160
  end
141
161
  end
142
162
  end
@@ -1,21 +1,22 @@
1
1
  # coding: utf-8
2
2
  require 'ostruct'
3
+ require 'set'
3
4
  module I18n::Tasks
4
5
  class CommandsBase
5
6
  include ::I18n::Tasks::Logging
6
7
 
7
- def initialize(i18n_task = nil)
8
- @i18n_task = i18n_task
8
+ def initialize(i18n = nil)
9
+ @i18n = i18n
9
10
  end
10
11
 
11
12
  def locales_opt(locales)
12
- return i18n_task.locales if locales == ['all'] || locales == 'all'
13
+ return i18n.locales if locales == ['all'] || locales == 'all'
13
14
  if locales.present?
14
15
  locales = Array(locales).map { |v| v.strip.split(/\s*[\+,:]\s*/).compact.presence if v.is_a?(String) }.flatten
15
16
  locales = locales.map(&:presence).compact.map { |v| v == 'base' ? base_locale : v }
16
17
  locales
17
18
  else
18
- i18n_task.locales
19
+ i18n.locales
19
20
  end
20
21
  end
21
22
 
@@ -25,6 +26,32 @@ module I18n::Tasks
25
26
  end
26
27
  end
27
28
 
29
+
30
+ VALID_TREE_FORMATS = %w(terminal-table yaml json inspect)
31
+
32
+ def print_locale_tree(tree, opt, version = :show_tree)
33
+ format = opt[:format] || VALID_TREE_FORMATS.first
34
+ raise CommandError.new("unknown format: #{format}. Valid formats are: #{VALID_TREE_FORMATS * ', '}.") unless VALID_TREE_FORMATS.include?(format)
35
+ case format
36
+ when 'terminal-table'
37
+ terminal_report.send(version, tree)
38
+ when 'inspect'
39
+ puts tree.inspect
40
+ else
41
+ puts i18n.data.adapter_dump tree, i18n.data.adapter_by_name(format)
42
+ end
43
+ end
44
+
45
+ protected
46
+
47
+ def terminal_report
48
+ @terminal_report ||= I18n::Tasks::Reports::Terminal.new(i18n)
49
+ end
50
+
51
+ def spreadsheet_report
52
+ @spreadsheet_report ||= I18n::Tasks::Reports::Spreadsheet.new(i18n)
53
+ end
54
+
28
55
  class << self
29
56
  def cmds
30
57
  @cmds ||= {}.with_indifferent_access
@@ -35,8 +62,8 @@ module I18n::Tasks
35
62
  @next_def = {}
36
63
  define_method name do |*args|
37
64
  begin
38
- coloring_was = Term::ANSIColor.coloring?
39
- Term::ANSIColor.coloring = STDOUT.isatty
65
+ coloring_was = Term::ANSIColor.coloring?
66
+ Term::ANSIColor.coloring = ENV['I18N_TASKS_COLOR'] || STDOUT.isatty
40
67
  instance_exec *args, &block
41
68
  rescue CommandError => e
42
69
  log_error e.message
@@ -65,10 +92,10 @@ module I18n::Tasks
65
92
  self.class.cmds.try(:[], name).try(:desc)
66
93
  end
67
94
 
68
- def i18n_task
69
- @i18n_task ||= I18n::Tasks::BaseTask.new
95
+ def i18n
96
+ @i18n ||= I18n::Tasks::BaseTask.new
70
97
  end
71
98
 
72
- delegate :base_locale, :t, to: :i18n_task
99
+ delegate :base_locale, :t, to: :i18n
73
100
  end
74
101
  end
@@ -13,8 +13,17 @@ module I18n::Tasks::Configuration
13
13
 
14
14
  def file_config
15
15
  file = CONFIG_FILES.detect { |f| File.exists?(f) }
16
- file = YAML.load(Erubis::Eruby.new(File.read(file)).result) if file
17
- {}.with_indifferent_access.merge(file.presence || {})
16
+ config = file && YAML.load(Erubis::Eruby.new(File.read(file)).result)
17
+ if config.present?
18
+ config.with_indifferent_access.tap do |c|
19
+ if c[:relative_roots]
20
+ warn_deprecated 'config/i18n-tasks.yml has relative_roots on top level. Please move relative_roots under search.'
21
+ c[:search][:relative_roots] = c.delete(:relative_roots)
22
+ end
23
+ end
24
+ else
25
+ {}.with_indifferent_access
26
+ end
18
27
  end
19
28
 
20
29
  def config=(conf)
@@ -34,10 +43,6 @@ module I18n::Tasks::Configuration
34
43
  end
35
44
  end
36
45
 
37
- def relative_roots
38
- @config_sections[:relative_roots] ||= config[:relative_roots].presence || %w(app/views)
39
- end
40
-
41
46
  # translation config
42
47
  # @return [Hash{String => String,Hash,Array}]
43
48
  def translation_config
@@ -75,21 +80,18 @@ module I18n::Tasks::Configuration
75
80
  end
76
81
  end
77
82
 
78
- def non_base_locales(from = nil)
79
- from ||= self.locales
80
- Array(from) - [base_locale]
81
- end
82
-
83
83
  # @return [String] default i18n locale
84
84
  def base_locale
85
85
  @config_sections[:base_locale] ||= (config[:base_locale] || 'en').to_s
86
86
  end
87
87
 
88
+
88
89
  def ignore_config(type = nil)
89
90
  key = type ? "ignore_#{type}" : 'ignore'
90
91
  @config_sections[key] ||= config[key]
91
92
  end
92
93
 
94
+ IGNORE_TYPES = [nil, :missing, :unused, :eq_base].freeze
93
95
  # evaluated configuration (as the app sees it)
94
96
  def config_sections
95
97
  # init all sections
@@ -97,9 +99,8 @@ module I18n::Tasks::Configuration
97
99
  locales
98
100
  data_config
99
101
  search_config
100
- relative_roots
101
102
  translation_config
102
- [nil, :missing, :unused, :eq_base].each do |ignore_type|
103
+ IGNORE_TYPES.each do |ignore_type|
103
104
  ignore_config ignore_type
104
105
  end
105
106
  @config_sections