1# frozen_string_literal: true 2 3module Gitlab 4 module I18n 5 class MetadataEntry 6 attr_reader :entry_data 7 8 # Avoid testing too many plurals if `nplurals` was incorrectly set. 9 # Based on info on https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html 10 # which mentions special cases for numbers ending in 2 digits 11 MAX_FORMS_TO_TEST = 101 12 13 def initialize(entry_data) 14 @entry_data = entry_data 15 end 16 17 def expected_forms 18 return unless plural_information 19 20 plural_information['nplurals'].to_i 21 end 22 23 def forms_to_test 24 @forms_to_test ||= [expected_forms, MAX_FORMS_TO_TEST].compact.min 25 end 26 27 private 28 29 def plural_information 30 return @plural_information if defined?(@plural_information) 31 32 if plural_line = entry_data[:msgstr].detect { |metadata_line| metadata_line.starts_with?('Plural-Forms: ') } 33 @plural_information = Hash[plural_line.scan(/(\w+)=([^;\n]+)/)] 34 end 35 end 36 end 37 end 38end 39