module I18n::Processes::MissingKeys

Constants

MISSING_TYPES

Public Class Methods

missing_keys_types() click to toggle source
# File lib/i18n/processes/missing_keys.rb, line 11
def self.missing_keys_types
  @missing_keys_types ||= MISSING_TYPES.keys
end

Public Instance Methods

collapse_same_key_in_locales!(forest) { |node| ... } click to toggle source

@param [::I18n::Processes::Data::Tree::Siblings] forest @yield [::I18n::Processes::Data::Tree::Node] @yieldreturn [Boolean] whether to collapse the node

# File lib/i18n/processes/missing_keys.rb, line 96
def collapse_same_key_in_locales!(forest)
  locales_and_node_by_key = {}
  to_remove               = []
  forest.each do |root|
    locale = root.key
    root.keys do |key, node|
      next unless yield node
      if locales_and_node_by_key.key?(key)
        locales_and_node_by_key[key][0] << locale
      else
        locales_and_node_by_key[key] = [[locale], node]
      end
      to_remove << node
    end
  end
  forest.remove_nodes_and_emptied_ancestors! to_remove
  locales_and_node_by_key.each_with_object({}) do |(key, (locales, node)), inv|
    (inv[locales.sort.join('+')] ||= []) << [key, node]
  end.map do |locales, keys_nodes|
    keys_nodes.each do |(key, node)|
      forest["#{locales}.#{key}"] = node
    end
  end
  forest
end
eq_base_keys(opts = {}) click to toggle source
# File lib/i18n/processes/missing_keys.rb, line 30
def eq_base_keys(opts = {})
  locales = Array(opts[:locales]).presence || self.locales
  (locales - [base_locale]).inject(empty_forest) do |tree, locale|
    tree.merge! equal_values_tree(locale, base_locale)
  end
end
equal_values_tree(locale, compare_to = base_locale) click to toggle source
# File lib/i18n/processes/missing_keys.rb, line 81
def equal_values_tree(locale, compare_to = base_locale)
  base = data[compare_to].first.children
  data[locale].select_keys(root: false) do |key, node|
    other_node = base[key]
    other_node && !node.reference? && node.value == other_node.value && !ignore_key?(key, :eq_base, locale)
  end.set_root_key!(locale, type: :eq_base)
end
locale_key_missing?(locale, key) click to toggle source
# File lib/i18n/processes/missing_keys.rb, line 89
def locale_key_missing?(locale, key)
  !key_value?(key, locale) && !external_key?(key) && !ignore_key?(key, :missing)
end
missing_diff_forest(locales, base = base_locale) click to toggle source
# File lib/i18n/processes/missing_keys.rb, line 37
def missing_diff_forest(locales, base = base_locale)
  tree = empty_forest
  # present in base but not locale
  (locales - [base]).each do |locale|
    tree.merge! missing_diff_tree(locale, base)
  end
  if locales.include?(base)
    # present in locale but not base
    (self.locales - [base]).each do |locale|
      tree.merge! missing_diff_tree(base, locale)
    end
  end
  tree
end
missing_diff_tree(locale, compared_to = base_locale) click to toggle source

keys present in compared_to, but not in locale

# File lib/i18n/processes/missing_keys.rb, line 59
def missing_diff_tree(locale, compared_to = base_locale)
  data[compared_to].select_keys do |key, _node|
    locale_key_missing? locale, depluralize_key(key, compared_to)
  end.set_root_key!(locale, type: :missing_diff).keys do |_key, node|
    # change path and locale to base
    data = { locale: locale, missing_diff_locale: node.data[:locale] }
    # $stderr.puts Rainbow("data: #{data}").green
    if node.data.key?(:path)
      data[:path] = LocalePathname.replace_locale(node.data[:path], node.data[:locale], locale)
    end
    # $stderr.puts Rainbow("data: #{node.data}").green
    node.data.update data
  end
end
missing_keys(locales: nil, types: nil, base_locale: nil) click to toggle source

@param types [:used, :diff] all if `nil`. @return [Siblings]

# File lib/i18n/processes/missing_keys.rb, line 21
def missing_keys(locales: nil, types: nil, base_locale: nil)
  locales ||= self.locales
  types   ||= missing_keys_types
  base = base_locale || self.base_locale
  types.inject(empty_forest) do |f, type|
    f.merge! send(:"missing_#{type}_forest", locales, base)
  end
end
missing_keys_types() click to toggle source
# File lib/i18n/processes/missing_keys.rb, line 15
def missing_keys_types
  MissingKeys.missing_keys_types
end
missing_used_forest(locales, _base = base_locale) click to toggle source
# File lib/i18n/processes/missing_keys.rb, line 52
def missing_used_forest(locales, _base = base_locale)
  locales.inject(empty_forest) do |forest, locale|
    forest.merge! missing_used_tree(locale)
  end
end
missing_used_tree(locale) click to toggle source

keys used in the code missing translations in locale

# File lib/i18n/processes/missing_keys.rb, line 75
def missing_used_tree(locale)
  used_tree(strict: true).select_keys do |key, _node|
    locale_key_missing?(locale, key)
  end.set_root_key!(locale, type: :missing_used)
end