module I18n::Tasks::PluralKeys
Constants
- CLDR_CATEGORY_KEYS
- PLURAL_KEY_RE
- PLURAL_KEY_SUFFIXES
Public Instance Methods
collapse_plural_nodes!(tree)
click to toggle source
# File lib/i18n/tasks/plural_keys.rb, line 10 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/tasks/plural_keys.rb, line 25 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
non_plural_other?(s)
click to toggle source
# File lib/i18n/tasks/plural_keys.rb, line 60 def non_plural_other?(s) s.size == 1 && s.first.leaf? && (!s.first.value.is_a?(String) || !s.first.value.include?('%{count}')) end
plural_forms?(s)
click to toggle source
# File lib/i18n/tasks/plural_keys.rb, line 54 def plural_forms?(s) return false if non_plural_other?(s) s.present? && s.all? { |node| node.leaf? && plural_suffix?(node.key) } end
plural_nodes(tree) { |parent| ... }
click to toggle source
@param [::I18n::Tasks::Data::Tree::Traversal] tree @yieldparam node [::I18n::Tasks::Data::Tree::Node] plural node
# File lib/i18n/tasks/plural_keys.rb, line 40 def plural_nodes(tree) return to_enum(:plural_nodes, tree) unless block_given? visited = Set.new tree.leaves do |node| parent = node.parent next if !parent || visited.include?(parent) yield parent if plural_forms?(parent.children) visited.add(parent) end self end
plural_suffix?(key)
click to toggle source
# File lib/i18n/tasks/plural_keys.rb, line 64 def plural_suffix?(key) PLURAL_KEY_SUFFIXES.include?(key) end