module I18n::Processes::PluralKeys

Constants

PLURAL_KEY_RE
PLURAL_KEY_SUFFIXES

Public Instance Methods

collapse_plural_nodes!(tree) click to toggle source
# File lib/i18n/processes/plural_keys.rb, line 8
def collapse_plural_nodes!(tree)
  tree.leaves.map(&:parent).compact.uniq.each do |node|
    children = node.children
    next unless plural_forms?(children)
    node.value    = children.to_hash
    node.children = nil
    node.data.merge! children.first.data
  end
  tree
end
depluralize_key(key, locale = base_locale) click to toggle source

@param [String] key i18n key @param [String] locale to pull key data from @return [String] the base form if the key is a specific plural form (e.g. apple for apple.many), the key otherwise.

# File lib/i18n/processes/plural_keys.rb, line 22
def depluralize_key(key, locale = base_locale)
  return key if key !~ PLURAL_KEY_RE
  key_name = last_key_part(key)
  parent_key = key[0..- (key_name.length + 2)]
  nodes = tree("#{locale}.#{parent_key}").presence || (locale != base_locale && tree("#{base_locale}.#{parent_key}"))
  if nodes && plural_forms?(nodes)
    parent_key
  else
    key
  end
end
plural_forms?(s) click to toggle source
# File lib/i18n/processes/plural_keys.rb, line 34
def plural_forms?(s)
  s.present? && s.all? { |node| node.leaf? && plural_suffix?(node.key) }
end
plural_suffix?(key) click to toggle source
# File lib/i18n/processes/plural_keys.rb, line 38
def plural_suffix?(key)
  PLURAL_KEY_SUFFIXES.include?(key)
end