Module: Num2words::Locales::EL
- Defined in:
- lib/num2words/locales/el.rb
Constant Summary collapse
- ONES_MASC =
I18n.t("num2words.ones_masc", locale: :el)
- ONES_FEM =
I18n.t("num2words.ones_fem", locale: :el)
- TEENS =
I18n.t("num2words.teens", locale: :el)
- TENS =
I18n.t("num2words.tens", locale: :el)
- HUNDREDS =
I18n.t("num2words.hundreds", locale: :el)
- SCALES =
I18n.t("num2words.scales", locale: :el)
- FRACTIONS =
I18n.t("num2words.fractions", locale: :el)
- GRAMMAR =
I18n.t("num2words.grammar", locale: :el)
- DATE =
I18n.t("num2words.date", locale: :el)
- DATE_TEMPLATE =
I18n.t("num2words.date.template", locale: :el)
- TIME =
I18n.t("num2words.time", locale: :el)
- TIME_TEMPLATE =
I18n.t("num2words.time.template", locale: :el)
- DATETIME_TEMPLATE =
I18n.t("num2words.datetime.template", locale: :el)
- ORDINALS =
I18n.t("num2words.numbers.ordinals", locale: :el)
- ONES_NEUT =
["μηδέν", "ένα", "δύο", "τρία", "τέσσερα", "πέντε", "έξι", "επτά", "οκτώ", "εννέα"].freeze
- TEENS_MASC =
["δέκα", "έντεκα", "δώδεκα", "δεκατρείς", "δεκατέσσερις", "δεκαπέντε", "δεκαέξι", "δεκαεπτά", "δεκαοκτώ", "δεκαεννέα"].freeze
- TEENS_FEM =
TEENS_MASC- TEENS_NEUT =
TEENS- FEMININE_MAJOR_CURRENCIES =
%i[GBP TRY UAH CZK SEK NOK DKK INR IDR PKR].freeze
- NEUTER_MAJOR_CURRENCIES =
%i[EUR USD RUB KRW PLN RON BGN BYN KZT ILS HUF SAR THB VND IRR RSD MYR BDT KES BRL CNY JPY].freeze
- NEUTER_MINOR_CURRENCIES =
%i[EUR USD GBP JPY CNY RUB KRW TRY PLN UAH CZK RON BGN BYN KZT SEK NOK DKK HUF THB VND IDR IRR MYR KES BRL].freeze
Class Method Summary collapse
- .cardinal(number, gender: :masculine) ⇒ Object
- .currency_major_gender(currency) ⇒ Object
- .currency_minor_gender(currency) ⇒ Object
- .currency_number_words(number, currency, unit:) ⇒ Object
- .date_day(day, format:, date_case:) ⇒ Object
- .date_year(year, format:) ⇒ Object
- .default_fraction_word ⇒ Object
- .fraction_joiner(joiner) ⇒ Object
- .fraction_numerator_feminine? ⇒ Boolean
- .integer_to_words(number, feminine: false) ⇒ Object
- .minus_word ⇒ Object
- .ones(gender) ⇒ Object
- .ordinal(value, format, gender: :masculine) ⇒ Object
- .pluralize(number, singular, few, plural) ⇒ Object
- .scale_gender(scale_idx) ⇒ Object
- .teens(gender) ⇒ Object
- .time_unit_feminine?(unit) ⇒ Boolean
- .triple_to_words(number, scale_idx, feminine: false) ⇒ Object
- .triple_words(number, scale_idx, gender:) ⇒ Object
Class Method Details
.cardinal(number, gender: :masculine) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/num2words/locales/el.rb', line 87 def cardinal(number, gender: :masculine) integer_value = Integer(number) negative = integer_value.negative? integer_value = integer_value.abs return ones(gender)[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_gender = scale_idx.zero? ? gender : scale_gender(scale_idx) group_words = triple_words(group_value, scale_idx, gender: group_gender) group_words.shift if scale_idx == 1 && group_value == 1 words.concat group_words end words.unshift(minus_word) if negative words.join(" ") end |
.currency_major_gender(currency) ⇒ Object
152 153 154 155 156 157 |
# File 'lib/num2words/locales/el.rb', line 152 def currency_major_gender(currency) return :feminine if FEMININE_MAJOR_CURRENCIES.include?(currency) return :neuter if NEUTER_MAJOR_CURRENCIES.include?(currency) :masculine end |
.currency_minor_gender(currency) ⇒ Object
159 160 161 |
# File 'lib/num2words/locales/el.rb', line 159 def currency_minor_gender(currency) NEUTER_MINOR_CURRENCIES.include?(currency) ? :neuter : :feminine end |
.currency_number_words(number, currency, unit:) ⇒ Object
65 66 67 68 |
# File 'lib/num2words/locales/el.rb', line 65 def currency_number_words(number, currency, unit:) gender = unit == :major ? currency_major_gender(currency) : currency_minor_gender(currency) cardinal(number, gender: gender) end |
.date_day(day, format:, date_case:) ⇒ Object
70 71 72 |
# File 'lib/num2words/locales/el.rb', line 70 def date_day(day, format:, date_case:) ordinal(day, :default) end |
.date_year(year, format:) ⇒ Object
74 75 76 |
# File 'lib/num2words/locales/el.rb', line 74 def date_year(year, format:) cardinal(year, gender: :neuter) end |
.default_fraction_word ⇒ Object
53 54 55 |
# File 'lib/num2words/locales/el.rb', line 53 def default_fraction_word GRAMMAR[:default_fraction] end |
.fraction_joiner(joiner) ⇒ Object
49 50 51 |
# File 'lib/num2words/locales/el.rb', line 49 def fraction_joiner(joiner) joiner.to_sym == :and ? "και" : GRAMMAR[:conjunction] end |
.fraction_numerator_feminine? ⇒ Boolean
57 58 59 |
# File 'lib/num2words/locales/el.rb', line 57 def fraction_numerator_feminine? false end |
.integer_to_words(number, feminine: false) ⇒ Object
34 35 36 |
# File 'lib/num2words/locales/el.rb', line 34 def integer_to_words(number, feminine: false) cardinal(number, gender: feminine ? :feminine : :masculine) end |
.minus_word ⇒ Object
45 46 47 |
# File 'lib/num2words/locales/el.rb', line 45 def minus_word GRAMMAR[:minus] end |
.ones(gender) ⇒ Object
136 137 138 139 140 141 142 |
# File 'lib/num2words/locales/el.rb', line 136 def ones(gender) case gender when :feminine then ONES_FEM when :neuter then ONES_NEUT else ONES_MASC end end |
.ordinal(value, format, gender: :masculine) ⇒ Object
78 79 80 81 82 83 84 85 |
# File 'lib/num2words/locales/el.rb', line 78 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
163 164 165 |
# File 'lib/num2words/locales/el.rb', line 163 def pluralize(number, singular, few, plural) number.abs == 1 ? singular : few end |
.scale_gender(scale_idx) ⇒ Object
132 133 134 |
# File 'lib/num2words/locales/el.rb', line 132 def scale_gender(scale_idx) scale_idx == 1 ? :feminine : :neuter end |
.teens(gender) ⇒ Object
144 145 146 147 148 149 150 |
# File 'lib/num2words/locales/el.rb', line 144 def teens(gender) case gender when :feminine then TEENS_FEM when :neuter then TEENS_NEUT else TEENS_MASC end end |
.time_unit_feminine?(unit) ⇒ Boolean
61 62 63 |
# File 'lib/num2words/locales/el.rb', line 61 def time_unit_feminine?(unit) unit == :hour end |
.triple_to_words(number, scale_idx, feminine: false) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/num2words/locales/el.rb', line 38 def triple_to_words(number, scale_idx, feminine: false) gender = feminine ? :feminine : :masculine gender = :feminine if scale_idx == 1 gender = :neuter if scale_idx > 1 triple_words(number, scale_idx, gender: gender) end |
.triple_words(number, scale_idx, gender:) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/num2words/locales/el.rb', line 113 def triple_words(number, scale_idx, gender:) return [] if number.zero? words = [] words << HUNDREDS[number / 100] if number >= 100 rest = number % 100 if rest.between?(10, 19) words << teens(gender)[rest - 10] else words << TENS[rest / 10] if rest >= 20 value = rest % 10 words << ones(gender)[value] if value.positive? end words << pluralize(number, *SCALES[scale_idx]) unless scale_idx.zero? words.compact end |