Module: I18n::Processes::PluralKeys
- Included in:
- BaseProcess
- Defined in:
- lib/i18n/processes/plural_keys.rb
Constant Summary collapse
- PLURAL_KEY_SUFFIXES =
Set.new %w[zero one two few many other]
- PLURAL_KEY_RE =
/\.(?:#{PLURAL_KEY_SUFFIXES.to_a * '|'})$/
Instance Method Summary collapse
- #collapse_plural_nodes!(tree) ⇒ Object
-
#depluralize_key(key, locale = base_locale) ⇒ String
The base form if the key is a specific plural form (e.g. apple for apple.many), the key otherwise.
- #plural_forms?(s) ⇒ Boolean
- #plural_suffix?(key) ⇒ Boolean
Instance Method Details
#collapse_plural_nodes!(tree) ⇒ Object
8 9 10 11 12 13 14 15 16 17 |
# 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) ⇒ String
Returns the base form if the key is a specific plural form (e.g. apple for apple.many), the key otherwise.
22 23 24 25 26 27 28 29 30 31 32 |
# 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) ⇒ Boolean
34 35 36 |
# 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) ⇒ Boolean
38 39 40 |
# File 'lib/i18n/processes/plural_keys.rb', line 38 def plural_suffix?(key) PLURAL_KEY_SUFFIXES.include?(key) end |