Module: Num2words::Locales::FR
- Defined in:
- lib/num2words/locales/fr.rb
Constant Summary collapse
- ONES_MASC =
I18n.t("num2words.ones_masc", locale: :fr)
- ONES_FEM =
I18n.t("num2words.ones_fem", locale: :fr)
- TEENS =
I18n.t("num2words.teens", locale: :fr)
- TENS =
I18n.t("num2words.tens", locale: :fr)
- HUNDREDS =
I18n.t("num2words.hundreds", locale: :fr)
- SCALES =
I18n.t("num2words.scales", locale: :fr)
- FRACTIONS =
I18n.t("num2words.fractions", locale: :fr)
- GRAMMAR =
I18n.t("num2words.grammar", locale: :fr)
- DATE =
I18n.t("num2words.date", locale: :fr)
- DATE_TEMPLATE =
I18n.t("num2words.date.template", locale: :fr)
- TIME =
I18n.t("num2words.time", locale: :fr)
- TIME_TEMPLATE =
I18n.t("num2words.time.template", locale: :fr)
- DATETIME_TEMPLATE =
I18n.t("num2words.datetime.template", locale: :fr)
- ORDINALS =
I18n.t("num2words.numbers.ordinals", locale: :fr)
Class Method Summary collapse
- .currency_major_feminine?(currency) ⇒ Boolean
- .currency_minor_feminine?(currency) ⇒ Boolean
- .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
- .minus_word ⇒ Object
- .pluralize(number, singular, _few, plural) ⇒ Object
- .time_unit_feminine?(unit) ⇒ Boolean
- .triple_to_words(number, scale_idx, feminine: false) ⇒ Object
- .under_hundred(number, feminine: false) ⇒ Object
- .under_thousand(number, feminine: false) ⇒ Object
Class Method Details
.currency_major_feminine?(currency) ⇒ Boolean
54 55 56 |
# File 'lib/num2words/locales/fr.rb', line 54 def currency_major_feminine?(currency) %i[GBP TRY UAH CZK SEK NOK DKK INR IDR PKR].include?(currency) end |
.currency_minor_feminine?(currency) ⇒ Boolean
58 59 60 |
# File 'lib/num2words/locales/fr.rb', line 58 def currency_minor_feminine?(currency) %i[ILS BGN SAR].include?(currency) end |
.date_day(day, format:, date_case:) ⇒ Object
73 74 75 76 77 |
# File 'lib/num2words/locales/fr.rb', line 73 def date_day(day, format:, date_case:) return "premier" if day == 1 under_thousand(day) end |
.date_year(year, format:) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/num2words/locales/fr.rb', line 79 def date_year(year, format:) groups = year.to_s .chars.reverse.each_slice(3).map(&:reverse) .map(&:join).map!(&:to_i).reverse words = [] groups.each_with_index do |group_value, index| scale_index = groups.size - index - 1 words.concat triple_to_words(group_value, scale_index) end words.join(" ") end |
.decimal_fraction_words(fraction_string) ⇒ Object
46 47 48 |
# File 'lib/num2words/locales/fr.rb', line 46 def decimal_fraction_words(fraction_string) fraction_string.chars.map { |digit| under_thousand(digit.to_i) }.join(" ") end |
.decimal_separator_word ⇒ Object
42 43 44 |
# File 'lib/num2words/locales/fr.rb', line 42 def decimal_separator_word "virgule" end |
.default_fraction_word ⇒ Object
34 35 36 |
# File 'lib/num2words/locales/fr.rb', line 34 def default_fraction_word GRAMMAR[:default_fraction] end |
.fraction_joiner(_joiner) ⇒ Object
30 31 32 |
# File 'lib/num2words/locales/fr.rb', line 30 def fraction_joiner(_joiner) GRAMMAR[:conjunction] end |
.fraction_numerator_feminine? ⇒ Boolean
38 39 40 |
# File 'lib/num2words/locales/fr.rb', line 38 def fraction_numerator_feminine? false end |
.minus_word ⇒ Object
26 27 28 |
# File 'lib/num2words/locales/fr.rb', line 26 def minus_word GRAMMAR[:minus] end |
.pluralize(number, singular, _few, plural) ⇒ Object
141 142 143 |
# File 'lib/num2words/locales/fr.rb', line 141 def pluralize(number, singular, _few, plural) number.abs == 1 ? singular : plural end |
.time_unit_feminine?(unit) ⇒ Boolean
50 51 52 |
# File 'lib/num2words/locales/fr.rb', line 50 def time_unit_feminine?(unit) unit == :hour || unit == :minute || unit == :second end |
.triple_to_words(number, scale_idx, feminine: false) ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/num2words/locales/fr.rb', line 62 def triple_to_words(number, scale_idx, feminine: false) words = scale_idx == 1 && number == 1 ? [] : under_thousand(number, feminine: feminine).split unless scale_idx.zero? scale_forms = SCALES[scale_idx] words << (number == 1 ? scale_forms[0] : scale_forms[2]) end words end |
.under_hundred(number, feminine: false) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/num2words/locales/fr.rb', line 112 def under_hundred(number, feminine: false) ones_data = feminine ? ONES_FEM : ONES_MASC return ones_data[number] if number < 10 return TEENS[number - 10] if number < 20 case number when 20..69 tens = number / 10 ones = number % 10 return TENS[tens] if ones.zero? return "#{TENS[tens]} et #{ones_data[ones]}" if ones == 1 "#{TENS[tens]} #{ones_data[ones]}" when 70..79 teen = number - 60 return "soixante et #{TEENS[1]}" if teen == 11 "soixante #{under_hundred(teen, feminine: feminine)}" when 80 "quatre-vingts" else rest = number - 80 return "quatre-vingt" if rest.zero? "quatre-vingt #{under_hundred(rest, feminine: feminine)}" end end |
.under_thousand(number, feminine: false) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/num2words/locales/fr.rb', line 93 def under_thousand(number, feminine: false) hundreds = number / 100 rest = number % 100 return under_hundred(rest, feminine: feminine) if hundreds.zero? hundred_words = if hundreds == 1 HUNDREDS[1] elsif rest.zero? HUNDREDS[hundreds] else HUNDREDS[hundreds].sub(/s\z/, "") end return hundred_words if rest.zero? [hundred_words, under_hundred(rest, feminine: feminine)].join(" ") end |