Module: I18n::Tasks::Configuration

Included in:
BaseTask
Defined in:
lib/i18n/tasks/configuration.rb

Overview

rubocop:disable Metrics/ModuleLength

Constant Summary collapse

DEFAULTS =
{
  base_locale: 'en',
  internal_locale: 'en',
  search: ::I18n::Tasks::UsedKeys::SEARCH_DEFAULTS,
  data: ::I18n::Tasks::Data::DATA_DEFAULTS
}.freeze
CONFIG_FILES =
%w[
  config/i18n-tasks.yml config/i18n-tasks.yml.erb
  i18n-tasks.yml i18n-tasks.yml.erb
].freeze
IGNORE_TYPES =
[nil, :missing, :unused, :eq_base].freeze

Instance Method Summary collapse

Instance Method Details

#base_localeString

Returns default i18n locale.

Returns:

  • (String)

    default i18n locale



82
83
84
# File 'lib/i18n/tasks/configuration.rb', line 82

def base_locale
  @config_sections[:base_locale] ||= (config[:base_locale] || DEFAULTS[:base_locale]).to_s
end

#configHash{String => String,Hash,Array}

i18n-tasks config (defaults + config/i18n-tasks.yml)

Returns:

  • (Hash{String => String,Hash,Array})


13
14
15
# File 'lib/i18n/tasks/configuration.rb', line 13

def config
  @config || (self.config = {})
end

#config=(conf) ⇒ Object



46
47
48
49
# File 'lib/i18n/tasks/configuration.rb', line 46

def config=(conf)
  @config = file_config.deep_merge(conf)
  @config_sections = {}
end

#config_for_inspectObject



121
122
123
124
125
126
127
# File 'lib/i18n/tasks/configuration.rb', line 121

def config_for_inspect
  to_hash_from_indifferent(config_sections.reject { |_k, v| v.blank? }).tap do |sections|
    sections.each_value do |section|
      section.merge! section.delete('config') if section.is_a?(Hash) && section.key?('config')
    end
  end
end

#config_sectionsObject

evaluated configuration (as the app sees it)



107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/i18n/tasks/configuration.rb', line 107

def config_sections
  # init all sections
  base_locale
  internal_locale
  locales
  data_config
  @config_sections[:search] ||= search_config
  translation_config
  IGNORE_TYPES.each do |ignore_type|
    ignore_config ignore_type
  end
  @config_sections
end

#data_configObject

data config

@return [Hash<adapter: String, options: Hash>]


53
54
55
56
57
58
# File 'lib/i18n/tasks/configuration.rb', line 53

def data_config
  @config_sections[:data] ||= {
    adapter: data.class.name,
    config: data.config
  }
end

#file_configObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/i18n/tasks/configuration.rb', line 22

def file_config
  file   = @config_override || CONFIG_FILES.detect { |f| File.exist?(f) }
  # rubocop:disable Security/Eval
  config = file && YAML.load(eval(Erubi::Engine.new(File.read(file, encoding: 'UTF-8')).src))
  # rubocop:enable Security/Eval
  if config.present?
    config.with_indifferent_access.tap do |c|
      if c[:relative_roots]
        warn_deprecated 'Please move relative_roots under search in config/i18n-tasks.yml.'
        c[:search][:relative_roots] = c.delete(:relative_roots)
      end

      if c.dig(:search, :exclude_method_name_paths)
        warn_deprecated(
          'Please rename exclude_method_name_paths to relative_exclude_method_name_paths in config/i18n-tasks.yml.'
        )
        c[:search][:relative_exclude_method_name_paths] = c[:search].delete(:exclude_method_name_paths)
      end
    end
  else
    {}.with_indifferent_access
  end
end

#ignore_config(type = nil) ⇒ Object



100
101
102
103
# File 'lib/i18n/tasks/configuration.rb', line 100

def ignore_config(type = nil)
  key = type ? "ignore_#{type}" : 'ignore'
  @config_sections[key] ||= config[key]
end

#internal_localeObject



86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/i18n/tasks/configuration.rb', line 86

def internal_locale
  @config_sections[:internal_locale] ||= begin
    internal_locale = (config[:internal_locale] || DEFAULTS[:internal_locale]).to_s
    valid_locales = Dir[File.join(I18n::Tasks.gem_path, 'config', 'locales', '*.yml')]
                    .map { |f| File.basename(f, '.yml') }
    unless valid_locales.include?(internal_locale)
      log_warn "invalid internal_locale #{internal_locale.inspect}. " \
               "Available internal locales: #{valid_locales * ', '}."
      internal_locale = DEFAULTS[:internal_locale].to_s
    end
    internal_locale
  end
end

#localesArray<String>

Returns all available locales, base_locale is always first.

Returns:

  • (Array<String>)

    all available locales, base_locale is always first



77
78
79
# File 'lib/i18n/tasks/configuration.rb', line 77

def locales
  @config_sections[:locales] ||= data.locales
end

#translation_configHash{String => String,Hash,Array}

translation config

Returns:

  • (Hash{String => String,Hash,Array})


62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/i18n/tasks/configuration.rb', line 62

def translation_config
  @config_sections[:translation] ||= begin
    conf = (config[:translation] || {}).with_indifferent_access
    conf[:google_translate_api_key] = ENV['GOOGLE_TRANSLATE_API_KEY'] if ENV.key?('GOOGLE_TRANSLATE_API_KEY')
    conf[:deepl_api_key] = ENV['DEEPL_AUTH_KEY'] if ENV.key?('DEEPL_AUTH_KEY')
    conf[:deepl_host] = ENV['DEEPL_HOST'] if ENV.key?('DEEPL_HOST')
    conf[:deepl_version] = ENV['DEEPL_VERSION'] if ENV.key?('DEEPL_VERSION')
    conf[:openai_api_key] = ENV['OPENAI_API_KEY'] if ENV.key?('OPENAI_API_KEY')
    conf[:openai_model] = ENV['OPENAI_MODEL'] if ENV.key?('OPENAI_MODEL')
    conf[:yandex_api_key] = ENV['YANDEX_API_KEY'] if ENV.key?('YANDEX_API_KEY')
    conf
  end
end