Module: Num2words::Locales::SV
- Defined in:
- lib/num2words/locales/sv.rb
Constant Summary collapse
- ONES_MASC =
I18n.t("num2words.ones_masc", locale: :sv)
- ONES_FEM =
I18n.t("num2words.ones_fem", locale: :sv)
- TEENS =
I18n.t("num2words.teens", locale: :sv)
- TENS =
I18n.t("num2words.tens", locale: :sv)
- HUNDREDS =
I18n.t("num2words.hundreds", locale: :sv)
- SCALES =
I18n.t("num2words.scales", locale: :sv)
- FRACTIONS =
I18n.t("num2words.fractions", locale: :sv)
- GRAMMAR =
I18n.t("num2words.grammar", locale: :sv)
- DATE =
I18n.t("num2words.date", locale: :sv)
- DATE_TEMPLATE =
I18n.t("num2words.date.template", locale: :sv)
- TIME =
I18n.t("num2words.time", locale: :sv)
- TIME_TEMPLATE =
I18n.t("num2words.time.template", locale: :sv)
- DATETIME_TEMPLATE =
I18n.t("num2words.datetime.template", locale: :sv)
- ORDINALS =
I18n.t("num2words.numbers.ordinals", locale: :sv)
- COMMON_GENDER_MAJOR_CURRENCIES =
%i[ BDT BGN BRL BYN CNY CZK DKK EUR HUF IDR ILS INR IRR JPY KES KRW KZT MYR NOK PKR PLN RON RSD RUB SAR SEK THB TRY UAH USD VND ].freeze
Class Method Summary collapse
- .cardinal(number, feminine: false) ⇒ 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
- .one_word(number, feminine:) ⇒ Object
- .ordinal(value, format, gender: :masculine) ⇒ Object
- .pluralize(number, singular, _few, plural) ⇒ Object
- .scale_number_words(number, scale_idx, feminine:) ⇒ Object
- .triple_to_words(number, scale_idx, feminine: false) ⇒ Object
- .under_hundred(number, feminine: false) ⇒ Object
- .under_thousand(number, feminine: false) ⇒ Object
Class Method Details
.cardinal(number, feminine: false) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/num2words/locales/sv.rb', line 98 def cardinal(number, feminine: false) integer_value = Integer(number) negative = integer_value.negative? integer_value = integer_value.abs return (feminine ? ONES_FEM[0] : 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 group_words = triple_to_words(group_value, scale_idx, feminine: feminine && scale_idx.zero?) words.concat(group_words) end words.unshift(minus_word) if negative words.join(" ") end |
.currency_major_feminine?(currency) ⇒ Boolean
55 56 57 |
# File 'lib/num2words/locales/sv.rb', line 55 def currency_major_feminine?(currency) COMMON_GENDER_MAJOR_CURRENCIES.include?(currency) end |
.currency_minor_feminine?(_currency) ⇒ Boolean
59 60 61 |
# File 'lib/num2words/locales/sv.rb', line 59 def currency_minor_feminine?(_currency) false end |
.currency_number_words(number, currency, unit:) ⇒ Object
63 64 65 66 |
# File 'lib/num2words/locales/sv.rb', line 63 def currency_number_words(number, currency, unit:) feminine = unit == :major && currency_major_feminine?(currency) cardinal(number, feminine: feminine) end |
.date_day(day, format:, date_case:) ⇒ Object
81 82 83 |
# File 'lib/num2words/locales/sv.rb', line 81 def date_day(day, format:, date_case:) ordinal(day, :nominative) end |
.date_year(year, format:) ⇒ Object
85 86 87 |
# File 'lib/num2words/locales/sv.rb', line 85 def date_year(year, format:) cardinal(year) end |
.decimal_fraction_words(fraction_string) ⇒ Object
51 52 53 |
# File 'lib/num2words/locales/sv.rb', line 51 def decimal_fraction_words(fraction_string) fraction_string.chars.map { |digit| cardinal(digit.to_i) }.join(" ") end |
.decimal_separator_word ⇒ Object
47 48 49 |
# File 'lib/num2words/locales/sv.rb', line 47 def decimal_separator_word "komma" end |
.default_fraction_word ⇒ Object
39 40 41 |
# File 'lib/num2words/locales/sv.rb', line 39 def default_fraction_word GRAMMAR[:default_fraction] end |
.fraction_joiner(joiner) ⇒ Object
35 36 37 |
# File 'lib/num2words/locales/sv.rb', line 35 def fraction_joiner(joiner) joiner.to_sym == :and ? "och" : GRAMMAR[:conjunction] end |
.fraction_numerator_feminine? ⇒ Boolean
43 44 45 |
# File 'lib/num2words/locales/sv.rb', line 43 def fraction_numerator_feminine? false end |
.integer_to_words(number, feminine: false) ⇒ Object
68 69 70 |
# File 'lib/num2words/locales/sv.rb', line 68 def integer_to_words(number, feminine: false) cardinal(number, feminine: feminine) end |
.minus_word ⇒ Object
31 32 33 |
# File 'lib/num2words/locales/sv.rb', line 31 def minus_word GRAMMAR[:minus] end |
.one_word(number, feminine:) ⇒ Object
147 148 149 |
# File 'lib/num2words/locales/sv.rb', line 147 def one_word(number, feminine:) feminine ? ONES_FEM[number] : ONES_MASC[number] end |
.ordinal(value, format, gender: :masculine) ⇒ Object
89 90 91 92 93 94 95 96 |
# File 'lib/num2words/locales/sv.rb', line 89 def ordinal(value, format, gender: :masculine) ordinals = ORDINALS[format] || ORDINALS[:nominative] gender_data = ordinals[gender] || ordinals[:masculine] return gender_data[value - 1] if value.between?(1, gender_data.length) cardinal(value) end |
.pluralize(number, singular, _few, plural) ⇒ Object
151 152 153 |
# File 'lib/num2words/locales/sv.rb', line 151 def pluralize(number, singular, _few, plural) number.abs == 1 ? singular : plural end |
.scale_number_words(number, scale_idx, feminine:) ⇒ Object
122 123 124 125 126 127 |
# File 'lib/num2words/locales/sv.rb', line 122 def scale_number_words(number, scale_idx, feminine:) return "ett" if scale_idx == 1 && number == 1 return "en" if scale_idx > 1 && number == 1 under_thousand(number, feminine: feminine) end |
.triple_to_words(number, scale_idx, feminine: false) ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/num2words/locales/sv.rb', line 72 def triple_to_words(number, scale_idx, feminine: false) return [] if number.zero? words = [] words << scale_number_words(number, scale_idx, feminine: feminine) words << pluralize(number, *SCALES[scale_idx]) unless scale_idx.zero? words end |
.under_hundred(number, feminine: false) ⇒ Object
139 140 141 142 143 144 145 |
# File 'lib/num2words/locales/sv.rb', line 139 def under_hundred(number, feminine: false) return one_word(number, feminine: feminine) if number < 10 return TEENS[number - 10] if number < 20 return TENS[number / 10] if (number % 10).zero? "#{TENS[number / 10]}#{one_word(number % 10, feminine: feminine)}" end |
.under_thousand(number, feminine: false) ⇒ Object
129 130 131 132 133 134 135 136 137 |
# File 'lib/num2words/locales/sv.rb', line 129 def under_thousand(number, feminine: false) return under_hundred(number, feminine: feminine) if number < 100 hundreds = number / 100 rest = number % 100 words = [HUNDREDS[hundreds]] words << under_hundred(rest, feminine: feminine) if rest.positive? words.join(" ") end |