Module: Num2words::Locales::KO
- Defined in:
- lib/num2words/locales/ko.rb
Constant Summary collapse
- ONES_MASC =
I18n.t("num2words.ones_masc", locale: :ko)
- ONES_FEM =
I18n.t("num2words.ones_fem", locale: :ko)
- TEENS =
I18n.t("num2words.teens", locale: :ko)
- TENS =
I18n.t("num2words.tens", locale: :ko)
- HUNDREDS =
I18n.t("num2words.hundreds", locale: :ko)
- SCALES =
I18n.t("num2words.scales", locale: :ko)
- FRACTIONS =
I18n.t("num2words.fractions", locale: :ko)
- GRAMMAR =
I18n.t("num2words.grammar", locale: :ko)
- DATE =
I18n.t("num2words.date", locale: :ko)
- DATE_TEMPLATE =
I18n.t("num2words.date.template", locale: :ko)
- TIME =
I18n.t("num2words.time", locale: :ko)
- TIME_TEMPLATE =
I18n.t("num2words.time.template", locale: :ko)
- DATETIME_TEMPLATE =
I18n.t("num2words.datetime.template", locale: :ko)
- ORDINALS =
I18n.t("num2words.numbers.ordinals", locale: :ko)
- LARGE_SCALES =
["", "만", "억", "조", "경"].freeze
Class Method Summary collapse
- .cardinal(number) ⇒ 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
- .join_currency_parts(parts) ⇒ Object
- .join_fraction_words(words) ⇒ Object
- .join_time_words(number_words, unit_words) ⇒ Object
- .minus_word ⇒ Object
- .ordinal(value, format, gender: :masculine) ⇒ Object
- .pluralize(_number, singular, _few, _plural) ⇒ Object
- .time_number_words(number, unit:) ⇒ Object
- .time_unit_feminine?(_unit) ⇒ Boolean
- .triple_to_words(number, scale_idx, feminine: false) ⇒ Object
- .under_hundred(number) ⇒ Object
- .under_ten_thousand(number) ⇒ Object
- .unit_with_scale(value, scale) ⇒ Object
Class Method Details
.cardinal(number) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/num2words/locales/ko.rb', line 114 def cardinal(number) 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(4).map(&:reverse) .map(&:join).map!(&:to_i).reverse words = groups.each_with_index.filter_map do |group_value, index| next if group_value.zero? scale_index = groups.size - index - 1 scale = LARGE_SCALES.fetch(scale_index, "") group_words = under_ten_thousand(group_value) scale.empty? ? group_words : "#{group_words}#{scale}" end words.unshift(minus_word) if negative words.join(" ") end |
.currency_major_feminine?(_currency) ⇒ Boolean
89 90 91 |
# File 'lib/num2words/locales/ko.rb', line 89 def currency_major_feminine?(_currency) false end |
.currency_minor_feminine?(_currency) ⇒ Boolean
93 94 95 |
# File 'lib/num2words/locales/ko.rb', line 93 def currency_minor_feminine?(_currency) false end |
.currency_number_words(number, _currency, unit:) ⇒ Object
97 98 99 |
# File 'lib/num2words/locales/ko.rb', line 97 def currency_number_words(number, _currency, unit:) cardinal(number) end |
.date_day(day, format:, date_case:) ⇒ Object
69 70 71 |
# File 'lib/num2words/locales/ko.rb', line 69 def date_day(day, format:, date_case:) cardinal(day) end |
.date_year(year, format:) ⇒ Object
73 74 75 |
# File 'lib/num2words/locales/ko.rb', line 73 def date_year(year, format:) cardinal(year) end |
.decimal_fraction_words(fraction_string) ⇒ Object
60 61 62 |
# File 'lib/num2words/locales/ko.rb', line 60 def decimal_fraction_words(fraction_string) fraction_string.chars.map { |digit| cardinal(digit.to_i) }.join(" ") end |
.decimal_separator_word ⇒ Object
56 57 58 |
# File 'lib/num2words/locales/ko.rb', line 56 def decimal_separator_word "점" end |
.default_fraction_word ⇒ Object
48 49 50 |
# File 'lib/num2words/locales/ko.rb', line 48 def default_fraction_word GRAMMAR[:default_fraction] end |
.fraction_joiner(joiner) ⇒ Object
44 45 46 |
# File 'lib/num2words/locales/ko.rb', line 44 def fraction_joiner(joiner) joiner.to_sym == :and ? "와" : GRAMMAR[:conjunction] end |
.fraction_numerator_feminine? ⇒ Boolean
52 53 54 |
# File 'lib/num2words/locales/ko.rb', line 52 def fraction_numerator_feminine? false end |
.integer_to_words(number, feminine: false) ⇒ Object
28 29 30 |
# File 'lib/num2words/locales/ko.rb', line 28 def integer_to_words(number, feminine: false) cardinal(number) end |
.join_currency_parts(parts) ⇒ Object
101 102 103 |
# File 'lib/num2words/locales/ko.rb', line 101 def join_currency_parts(parts) parts.join(" ").strip end |
.join_fraction_words(words) ⇒ Object
64 65 66 67 |
# File 'lib/num2words/locales/ko.rb', line 64 def join_fraction_words(words) sign_word, integer_words, conjunction_word, numerator_words, denominator_words = words [sign_word, integer_words, conjunction_word, denominator_words, numerator_words].compact.reject(&:empty?).join(" ") end |
.join_time_words(number_words, unit_words) ⇒ Object
85 86 87 |
# File 'lib/num2words/locales/ko.rb', line 85 def join_time_words(number_words, unit_words) "#{number_words} #{unit_words}" end |
.minus_word ⇒ Object
40 41 42 |
# File 'lib/num2words/locales/ko.rb', line 40 def minus_word GRAMMAR[:minus] end |
.ordinal(value, format, gender: :masculine) ⇒ Object
105 106 107 108 109 110 111 112 |
# File 'lib/num2words/locales/ko.rb', line 105 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
168 169 170 |
# File 'lib/num2words/locales/ko.rb', line 168 def pluralize(_number, singular, _few, _plural) singular end |
.time_number_words(number, unit:) ⇒ Object
81 82 83 |
# File 'lib/num2words/locales/ko.rb', line 81 def time_number_words(number, unit:) cardinal(number) end |
.time_unit_feminine?(_unit) ⇒ Boolean
77 78 79 |
# File 'lib/num2words/locales/ko.rb', line 77 def time_unit_feminine?(_unit) false end |
.triple_to_words(number, scale_idx, feminine: false) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/num2words/locales/ko.rb', line 32 def triple_to_words(number, scale_idx, feminine: false) return [] if number.zero? words = under_ten_thousand(number) scale = LARGE_SCALES[scale_idx].to_s ["#{words}#{scale}"] end |
.under_hundred(number) ⇒ Object
151 152 153 154 155 156 157 158 159 |
# File 'lib/num2words/locales/ko.rb', line 151 def under_hundred(number) return "" if number.zero? return TEENS[number - 10] if number.between?(10, 19) return ONES_MASC[number] if number < 10 tens = number / 10 ones = number % 10 [TENS[tens], ones.positive? ? ONES_MASC[ones] : nil].compact.reject(&:empty?).join end |
.under_ten_thousand(number) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/num2words/locales/ko.rb', line 138 def under_ten_thousand(number) thousands = number / 1000 remainder = number % 1000 hundreds = remainder / 100 rest = remainder % 100 [ unit_with_scale(thousands, "천"), unit_with_scale(hundreds, "백"), under_hundred(rest) ].compact.reject(&:empty?).join end |
.unit_with_scale(value, scale) ⇒ Object
161 162 163 164 165 166 |
# File 'lib/num2words/locales/ko.rb', line 161 def unit_with_scale(value, scale) return "" if value.zero? return scale if value == 1 "#{ONES_MASC[value]}#{scale}" end |