Module: Num2words::Locales::ML

Defined in:
lib/num2words/locales/ml.rb

Constant Summary collapse

ONES_MASC =
I18n.t("num2words.ones_masc", locale: :ml)
ONES_FEM =
I18n.t("num2words.ones_fem", locale: :ml)
TEENS =
I18n.t("num2words.teens", locale: :ml)
TENS =
I18n.t("num2words.tens", locale: :ml)
HUNDREDS =
I18n.t("num2words.hundreds", locale: :ml)
SCALES =
I18n.t("num2words.scales", locale: :ml)
FRACTIONS =
I18n.t("num2words.fractions", locale: :ml)
GRAMMAR =
I18n.t("num2words.grammar", locale: :ml)
DATE =
I18n.t("num2words.date", locale: :ml)
DATE_TEMPLATE =
I18n.t("num2words.date.template", locale: :ml)
TIME =
I18n.t("num2words.time", locale: :ml)
TIME_TEMPLATE =
I18n.t("num2words.time.template", locale: :ml)
DATETIME_TEMPLATE =
I18n.t("num2words.datetime.template", locale: :ml)
ORDINALS =
I18n.t("num2words.numbers.ordinals", locale: :ml)
UNDER_HUNDRED =
[
  "പൂജ്യം", "ഒന്ന്", "രണ്ട്", "മൂന്ന്", "നാല്", "അഞ്ച്", "ആറ്", "ഏഴ്", "എട്ട്", "ഒമ്പത്",
  "പത്ത്", "പതിനൊന്ന്", "പന്ത്രണ്ട്", "പതിമൂന്ന്", "പതിനാല്", "പതിനഞ്ച്", "പതിനാറ്", "പതിനേഴ്", "പതിനെട്ട്", "പത്തൊമ്പത്",
  "ഇരുപത്", "ഇരുപത്തൊന്ന്", "ഇരുപത്തിരണ്ട്", "ഇരുപത്തിമൂന്ന്", "ഇരുപത്തിനാല്", "ഇരുപത്തിയഞ്ച്", "ഇരുപത്തിയാറ്", "ഇരുപത്തിയേഴ്", "ഇരുപത്തിയെട്ട്", "ഇരുപത്തൊമ്പത്",
  "മുപ്പത്", "മുപ്പത്തൊന്ന്", "മുപ്പത്തിരണ്ട്", "മുപ്പത്തിമൂന്ന്", "മുപ്പത്തിനാല്", "മുപ്പത്തിയഞ്ച്", "മുപ്പത്തിയാറ്", "മുപ്പത്തിയേഴ്", "മുപ്പത്തിയെട്ട്", "മുപ്പത്തൊമ്പത്",
  "നാല്പത്", "നാല്പത്തൊന്ന്", "നാല്പത്തിരണ്ട്", "നാല്പത്തിമൂന്ന്", "നാല്പത്തിനാല്", "നാല്പത്തിയഞ്ച്", "നാല്പത്തിയാറ്", "നാല്പത്തിയേഴ്", "നാല്പത്തിയെട്ട്", "നാല്പത്തൊമ്പത്",
  "അമ്പത്", "അമ്പത്തൊന്ന്", "അമ്പത്തിരണ്ട്", "അമ്പത്തിമൂന്ന്", "അമ്പത്തിനാല്", "അമ്പത്തിയഞ്ച്", "അമ്പത്തിയാറ്", "അമ്പത്തിയേഴ്", "അമ്പത്തിയെട്ട്", "അമ്പത്തൊമ്പത്",
  "അറുപത്", "അറുപത്തൊന്ന്", "അറുപത്തിരണ്ട്", "അറുപത്തിമൂന്ന്", "അറുപത്തിനാല്", "അറുപത്തിയഞ്ച്", "അറുപത്തിയാറ്", "അറുപത്തിയേഴ്", "അറുപത്തിയെട്ട്", "അറുപത്തൊമ്പത്",
  "എഴുപത്", "എഴുപത്തൊന്ന്", "എഴുപത്തിരണ്ട്", "എഴുപത്തിമൂന്ന്", "എഴുപത്തിനാല്", "എഴുപത്തിയഞ്ച്", "എഴുപത്തിയാറ്", "എഴുപത്തിയേഴ്", "എഴുപത്തിയെട്ട്", "എഴുപത്തൊമ്പത്",
  "എൺപത്", "എൺപത്തൊന്ന്", "എൺപത്തിരണ്ട്", "എൺപത്തിമൂന്ന്", "എൺപത്തിനാല്", "എൺപത്തിയഞ്ച്", "എൺപത്തിയാറ്", "എൺപത്തിയേഴ്", "എൺപത്തിയെട്ട്", "എൺപത്തൊമ്പത്",
  "തൊണ്ണൂറ്", "തൊണ്ണൂറ്റൊന്ന്", "തൊണ്ണൂറ്റിരണ്ട്", "തൊണ്ണൂറ്റിമൂന്ന്", "തൊണ്ണൂറ്റിനാല്", "തൊണ്ണൂറ്റിയഞ്ച്", "തൊണ്ണൂറ്റിയാറ്", "തൊണ്ണൂറ്റിയേഴ്", "തൊണ്ണൂറ്റിയെട്ട്", "തൊണ്ണൂറ്റൊമ്പത്"
].freeze
INDIAN_SCALES =
[
  [1_000_000_000, "ശതകോടി"],
  [10_000_000, "കോടി"],
  [100_000, "ലക്ഷം"],
  [1_000, "ആയിരം"]
].freeze

Class Method Summary collapse

Class Method Details

.cardinal(number) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/num2words/locales/ml.rb', line 119

def cardinal(number)
  integer_value = Integer(number)
  negative = integer_value.negative?
  integer_value = integer_value.abs

  return UNDER_HUNDRED[0] if integer_value.zero?

  remainder = integer_value
  words = []

  INDIAN_SCALES.each do |value, label|
    next if remainder < value

    group_value = remainder / value
    remainder %= value
    words << [cardinal(group_value), label].join(" ")
  end

  words << under_thousand(remainder) if remainder.positive?
  words.unshift(minus_word) if negative
  words.join(" ")
end

.currency_major_feminine?(_currency) ⇒ Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/num2words/locales/ml.rb', line 98

def currency_major_feminine?(_currency)
  false
end

.currency_minor_feminine?(_currency) ⇒ Boolean

Returns:

  • (Boolean)


102
103
104
# File 'lib/num2words/locales/ml.rb', line 102

def currency_minor_feminine?(_currency)
  false
end

.currency_number_words(number, _currency, unit:) ⇒ Object



106
107
108
# File 'lib/num2words/locales/ml.rb', line 106

def currency_number_words(number, _currency, unit:)
  cardinal(number)
end

.date_day(day, format:, date_case:) ⇒ Object



82
83
84
# File 'lib/num2words/locales/ml.rb', line 82

def date_day(day, format:, date_case:)
  ordinal(day, :default)
end

.date_year(year, format:) ⇒ Object



86
87
88
# File 'lib/num2words/locales/ml.rb', line 86

def date_year(year, format:)
  cardinal(year)
end

.decimal_fraction_words(fraction_string) ⇒ Object



78
79
80
# File 'lib/num2words/locales/ml.rb', line 78

def decimal_fraction_words(fraction_string)
  fraction_string.chars.map { |digit| cardinal(digit.to_i) }.join(" ")
end

.decimal_separator_wordObject



74
75
76
# File 'lib/num2words/locales/ml.rb', line 74

def decimal_separator_word
  "ദശാംശം"
end

.default_fraction_wordObject



66
67
68
# File 'lib/num2words/locales/ml.rb', line 66

def default_fraction_word
  GRAMMAR[:default_fraction]
end

.fraction_joiner(joiner) ⇒ Object



62
63
64
# File 'lib/num2words/locales/ml.rb', line 62

def fraction_joiner(joiner)
  joiner.to_sym == :and ? "കൂടാതെ" : GRAMMAR[:conjunction]
end

.fraction_numerator_feminine?Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/num2words/locales/ml.rb', line 70

def fraction_numerator_feminine?
  false
end

.integer_to_words(number, feminine: false) ⇒ Object



46
47
48
# File 'lib/num2words/locales/ml.rb', line 46

def integer_to_words(number, feminine: false)
  cardinal(number)
end

.minus_wordObject



58
59
60
# File 'lib/num2words/locales/ml.rb', line 58

def minus_word
  GRAMMAR[:minus]
end

.ordinal(value, format, gender: :masculine) ⇒ Object



110
111
112
113
114
115
116
117
# File 'lib/num2words/locales/ml.rb', line 110

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)
end

.pluralize(_number, singular, _few, _plural) ⇒ Object



152
153
154
# File 'lib/num2words/locales/ml.rb', line 152

def pluralize(_number, singular, _few, _plural)
  singular
end

.time_number_words(number, unit:) ⇒ Object



94
95
96
# File 'lib/num2words/locales/ml.rb', line 94

def time_number_words(number, unit:)
  cardinal(number)
end

.time_unit_feminine?(_unit) ⇒ Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/num2words/locales/ml.rb', line 90

def time_unit_feminine?(_unit)
  false
end

.triple_to_words(number, scale_idx, feminine: false) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/num2words/locales/ml.rb', line 50

def triple_to_words(number, scale_idx, feminine: false)
  return [] if number.zero?

  words = [under_thousand(number)]
  words << SCALES[scale_idx][0] unless scale_idx.zero?
  words
end

.under_thousand(number) ⇒ Object



142
143
144
145
146
147
148
149
150
# File 'lib/num2words/locales/ml.rb', line 142

def under_thousand(number)
  return UNDER_HUNDRED[number] if number < 100

  hundreds = number / 100
  rest = number % 100
  words = [HUNDREDS[hundreds]]
  words << UNDER_HUNDRED[rest] if rest.positive?
  words.join(" ")
end