Module: Num2words::Locales::RO
- Defined in:
- lib/num2words/locales/ro.rb
Constant Summary collapse
- ONES_MASC =
I18n.t("num2words.ones_masc", locale: :ro)
- ONES_FEM =
I18n.t("num2words.ones_fem", locale: :ro)
- TEENS =
I18n.t("num2words.teens", locale: :ro)
- TENS =
I18n.t("num2words.tens", locale: :ro)
- HUNDREDS =
I18n.t("num2words.hundreds", locale: :ro)
- SCALES =
I18n.t("num2words.scales", locale: :ro)
- FRACTIONS =
I18n.t("num2words.fractions", locale: :ro)
- GRAMMAR =
I18n.t("num2words.grammar", locale: :ro)
- DATE =
I18n.t("num2words.date", locale: :ro)
- DATE_TEMPLATE =
I18n.t("num2words.date.template", locale: :ro)
- TIME =
I18n.t("num2words.time", locale: :ro)
- TIME_TEMPLATE =
I18n.t("num2words.time.template", locale: :ro)
- DATETIME_TEMPLATE =
I18n.t("num2words.datetime.template", locale: :ro)
- ORDINALS =
I18n.t("num2words.numbers.ordinals", locale: :ro)
- FEMININE_MAJOR_CURRENCIES =
%i[GBP RUB TRY UAH CZK BYN SEK NOK DKK INR IDR PKR].freeze
- FEMININE_MINOR_CURRENCIES =
%i[RUB UAH BYN ILS SAR].freeze
Class Method Summary collapse
- .cardinal(number, gender: :masculine) ⇒ Object
- .currency_major_feminine?(currency) ⇒ Boolean
- .currency_minor_feminine?(currency) ⇒ Boolean
- .currency_number_words(number, currency, unit:) ⇒ Object
- .date_day(day, format:, date_case:) ⇒ Object
- .date_year(year, format:) ⇒ Object
- .decimal_fraction_words(fraction_string) ⇒ Object
- .decimal_separator_word ⇒ Object
- .default_fraction_word ⇒ Object
- .fraction_joiner(joiner) ⇒ Object
- .fraction_numerator_feminine? ⇒ Boolean
- .integer_to_words(number, feminine: false) ⇒ Object
- .minus_word ⇒ Object
- .needs_de_before_scale?(number) ⇒ Boolean
- .one_word(number, gender:) ⇒ Object
- .ordinal(value, format, gender: :masculine) ⇒ Object
- .pluralize(number, singular, few, _plural) ⇒ Object
- .scale_number_words(number, scale_idx) ⇒ Object
- .time_number_words(number, unit:) ⇒ Object
- .time_unit_feminine?(unit) ⇒ Boolean
- .triple_to_words(number, scale_idx, feminine: false) ⇒ Object
- .under_hundred(number, gender: :masculine) ⇒ Object
- .under_thousand(number, gender: :masculine) ⇒ Object
Class Method Details
.cardinal(number, gender: :masculine) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/num2words/locales/ro.rb', line 113 def cardinal(number, gender: :masculine) integer_value = Integer(number) negative = integer_value.negative? integer_value = integer_value.abs return ONES_MASC[0] if integer_value.zero? groups = integer_value.to_s .chars.reverse.each_slice(3).map(&:reverse) .map(&:join).map!(&:to_i).reverse words = [] groups.each_with_index do |group_value, index| next if group_value.zero? scale_idx = groups.size - index - 1 words.concat triple_to_words(group_value, scale_idx, feminine: gender == :feminine && scale_idx.zero?) end words.unshift(minus_word) if negative words.join(" ") end |
.currency_major_feminine?(currency) ⇒ Boolean
78 79 80 |
# File 'lib/num2words/locales/ro.rb', line 78 def currency_major_feminine?(currency) FEMININE_MAJOR_CURRENCIES.include?(currency) end |
.currency_minor_feminine?(currency) ⇒ Boolean
82 83 84 |
# File 'lib/num2words/locales/ro.rb', line 82 def currency_minor_feminine?(currency) FEMININE_MINOR_CURRENCIES.include?(currency) end |
.currency_number_words(number, currency, unit:) ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/num2words/locales/ro.rb', line 86 def currency_number_words(number, currency, unit:) gender = if unit == :major currency_major_feminine?(currency) ? :feminine : :masculine else currency_minor_feminine?(currency) ? :feminine : :masculine end cardinal(number, gender: gender) end |
.date_day(day, format:, date_case:) ⇒ Object
96 97 98 |
# File 'lib/num2words/locales/ro.rb', line 96 def date_day(day, format:, date_case:) ordinal(day, :default) end |
.date_year(year, format:) ⇒ Object
100 101 102 |
# File 'lib/num2words/locales/ro.rb', line 100 def date_year(year, format:) cardinal(year) end |
.decimal_fraction_words(fraction_string) ⇒ Object
65 66 67 |
# File 'lib/num2words/locales/ro.rb', line 65 def decimal_fraction_words(fraction_string) fraction_string.chars.map { |digit| cardinal(digit.to_i) }.join(" ") end |
.decimal_separator_word ⇒ Object
61 62 63 |
# File 'lib/num2words/locales/ro.rb', line 61 def decimal_separator_word "virgulă" end |
.default_fraction_word ⇒ Object
53 54 55 |
# File 'lib/num2words/locales/ro.rb', line 53 def default_fraction_word GRAMMAR[:default_fraction] end |
.fraction_joiner(joiner) ⇒ Object
49 50 51 |
# File 'lib/num2words/locales/ro.rb', line 49 def fraction_joiner(joiner) joiner.to_sym == :and ? "și" : GRAMMAR[:conjunction] end |
.fraction_numerator_feminine? ⇒ Boolean
57 58 59 |
# File 'lib/num2words/locales/ro.rb', line 57 def fraction_numerator_feminine? true end |
.integer_to_words(number, feminine: false) ⇒ Object
29 30 31 |
# File 'lib/num2words/locales/ro.rb', line 29 def integer_to_words(number, feminine: false) cardinal(number, gender: feminine ? :feminine : :masculine) end |
.minus_word ⇒ Object
45 46 47 |
# File 'lib/num2words/locales/ro.rb', line 45 def minus_word GRAMMAR[:minus] end |
.needs_de_before_scale?(number) ⇒ Boolean
144 145 146 |
# File 'lib/num2words/locales/ro.rb', line 144 def needs_de_before_scale?(number) number >= 20 end |
.one_word(number, gender:) ⇒ Object
169 170 171 172 173 |
# File 'lib/num2words/locales/ro.rb', line 169 def one_word(number, gender:) return ONES_FEM[number] if gender == :feminine ONES_MASC[number] end |
.ordinal(value, format, gender: :masculine) ⇒ Object
104 105 106 107 108 109 110 111 |
# File 'lib/num2words/locales/ro.rb', line 104 def ordinal(value, format, gender: :masculine) ordinals = ORDINALS[format] || ORDINALS[:default] || ORDINALS[:nominative] gender_data = ordinals[gender] || ordinals[:masculine] return gender_data[value - 1] if value.between?(1, gender_data.length) cardinal(value, gender: gender) end |
.pluralize(number, singular, few, _plural) ⇒ Object
175 176 177 |
# File 'lib/num2words/locales/ro.rb', line 175 def pluralize(number, singular, few, _plural) number.abs == 1 ? singular : few end |
.scale_number_words(number, scale_idx) ⇒ Object
136 137 138 139 140 141 142 |
# File 'lib/num2words/locales/ro.rb', line 136 def scale_number_words(number, scale_idx) return ["o"] if scale_idx == 1 && number == 1 return ["un"] if scale_idx > 1 && number == 1 return ["două"] if number == 2 [under_thousand(number, gender: :masculine)] end |
.time_number_words(number, unit:) ⇒ Object
73 74 75 76 |
# File 'lib/num2words/locales/ro.rb', line 73 def time_number_words(number, unit:) gender = time_unit_feminine?(unit) ? :feminine : :masculine cardinal(number, gender: gender) end |
.time_unit_feminine?(unit) ⇒ Boolean
69 70 71 |
# File 'lib/num2words/locales/ro.rb', line 69 def time_unit_feminine?(unit) %i[hour second].include?(unit) end |
.triple_to_words(number, scale_idx, feminine: false) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/num2words/locales/ro.rb', line 33 def triple_to_words(number, scale_idx, feminine: false) return [] if number.zero? return [under_thousand(number, gender: feminine ? :feminine : :masculine)] if scale_idx.zero? scale = pluralize(number, *SCALES[scale_idx]) words = scale_number_words(number, scale_idx) words << "de" if needs_de_before_scale?(number) words << scale words end |
.under_hundred(number, gender: :masculine) ⇒ Object
158 159 160 161 162 163 164 165 166 167 |
# File 'lib/num2words/locales/ro.rb', line 158 def under_hundred(number, gender: :masculine) return one_word(number, gender: gender) if number < 10 return TEENS[number - 10] if number < 20 tens = number / 10 ones = number % 10 return TENS[tens] if ones.zero? [TENS[tens], one_word(ones, gender: gender)].join(" și ") end |
.under_thousand(number, gender: :masculine) ⇒ Object
148 149 150 151 152 153 154 155 156 |
# File 'lib/num2words/locales/ro.rb', line 148 def under_thousand(number, gender: :masculine) return under_hundred(number, gender: gender) if number < 100 hundreds = number / 100 rest = number % 100 words = [HUNDREDS[hundreds]] words << under_hundred(rest, gender: gender) if rest.positive? words.join(" ") end |