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,
  translation_backend: :google
}.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



88
89
90
# File 'lib/i18n/tasks/configuration.rb', line 88

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})


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

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

#config=(conf) ⇒ Object



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

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

#config_for_inspectObject



127
128
129
130
131
132
133
# File 'lib/i18n/tasks/configuration.rb', line 127

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)



113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/i18n/tasks/configuration.rb', line 113

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>]


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

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

#file_configObject



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

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



106
107
108
109
# File 'lib/i18n/tasks/configuration.rb', line 106

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

#internal_localeObject



92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/i18n/tasks/configuration.rb', line 92

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



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

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

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

translation config

Returns:

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


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/i18n/tasks/configuration.rb', line 63

def translation_config # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
  @config_sections[:translation] ||= begin
    conf = (config[:translation] || {}).with_indifferent_access
    conf[:backend] ||= DEFAULTS[:translation_backend]
    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[:openai_locale_prompts] ||= {}
    conf[:watsonx_api_key] = ENV["WATSONX_API_KEY"] if ENV.key?("WATSONX_API_KEY")
    conf[:watsonx_project_id] = ENV["WATSONX_PROJECT_ID"] if ENV.key?("WATSONX_PROJECT_ID")
    conf[:watsonx_model] = ENV["WATSONX_MODEL"] if ENV.key?("WATSONX_MODEL")
    conf[:yandex_api_key] = ENV["YANDEX_API_KEY"] if ENV.key?("YANDEX_API_KEY")
    conf
  end
end