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
-
#base_locale ⇒ String
Default i18n locale.
-
#config ⇒ Hash{String => String,Hash,Array}
i18n-tasks config (defaults + config/i18n-tasks.yml).
- #config=(conf) ⇒ Object
- #config_for_inspect ⇒ Object
-
#config_sections ⇒ Object
evaluated configuration (as the app sees it).
-
#data_config ⇒ Object
data config @return [Hash<adapter: String, options: Hash>].
- #file_config ⇒ Object
- #ignore_config(type = nil) ⇒ Object
- #internal_locale ⇒ Object
-
#locales ⇒ Array<String>
All available locales, base_locale is always first.
-
#translation_config ⇒ Hash{String => String,Hash,Array}
translation config.
Instance Method Details
#base_locale ⇒ String
Returns 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 |
#config ⇒ Hash{String => String,Hash,Array}
i18n-tasks config (defaults + config/i18n-tasks.yml)
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_inspect ⇒ Object
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_sections ⇒ Object
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_config ⇒ Object
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_config ⇒ Object
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_locale ⇒ Object
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 |
#locales ⇒ Array<String>
Returns 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_config ⇒ Hash{String => String,Hash,Array}
translation config
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 |