num2words Gem Version

📦 num2words — Ruby-гем для преобразования чисел в строковое представление (прописью).


✨ Основные возможности

  • Поддержка чисел, времени, дат и валют:
    • Integer123.to_words(:ru)"сто двадцать три"
    • Float12.5.to_words(:en)"twelve and five tenths"
    • Time / DateTime"2024-08-21 14:35:42".to_words(:ru, :time)"четырнадцать часов тридцать пять минут сорок две секунды"
    • Float.to_currency12.5.to_currency(:ru)"двенадцать рублей пятьдесят копеек"
  • Кастомизация вывода:
    • Краткая форма (short: true) → "четырнадцать часов тридцать пять минут"
    • Форматы времени (:hours_only, :hours_minutes, :hours_minutes_seconds)
    • Выбор локали: :ru, :en (из коробки), легко расширить YAML-файлами
  • Расширение Integer, Float, Date, Time, DateTime удобными методами.
  • Локали инициализируются только при обращении к ним (lazy loading) через lib/num2words/locales.rb.
  • Унифицированный Converter, делегирующий работу нужной локали.
  • Настраиваемые правила разрядов чисел и валют через I18n YAML.

📦 Установка

Добавьте в Gemfile:

gem "num2words"

Или установите напрямую:

gem install num2words

🚀 Быстрый старт

require "num2words"

🔢 Числа

# Integer
123.to_words(:ru)          # => "сто двадцать три"
123.to_words(:en)          # => "one hundred twenty three"

# Float
45.67.to_words(:ru)        # => "сорок пять целых шестьдесят семь сотых"
45.67.to_words(:en)        # => "forty five and sixty seven hundredths"

💰 Валюта

21.05.to_currency(:ru)     # => "двадцать один рубль пять копеек"
12.5.to_currency(:en)      # => "twelve dollars fifty cents"

📅 Дата

"2024-08-21".to_words(:ru, :date)
# => "двадцать первое августа две тысячи двадцать четвертого года"

"2024-08-21".to_words(:en, :date)
# => "the twenty-first of August, two thousand twenty four"

⏰ Время

"14:35:42".to_words(:ru, :time)
# => "четырнадцать часов тридцать пять минут сорок две секунды"

"14:35:42".to_words(:ru, :time, short: true) # или короткая запись: "14:35:42".to_words(:ru, :time, true)
# => "четырнадцать часов тридцать пять минут"

"14:35:42".to_words(:en, :time)
# => "fourteen hours thirty five minutes forty two seconds"

🕓 Дата и время

"2024-08-21 14:35:42".to_words(:ru)
# =>  "двадцать первого августа две тысячи двадцать четвёртого года, четырнадцать часов тридцать пять минут сорок две секунды"

"2024-08-21 14:35:42".to_words(:en)
# => "the twenty-first of August, two thousand twenty four at fourteen hours thirty five minutes forty two seconds" 

⚙️ Опции

  • locale: :ru | :en — язык (по умолчанию берётся I18n.locale или :ru).
  • :date, :time, :datetime — формат преобразования для строк.
  • short: true — краткая форма для даты/времени.
  • Num2words.to_words(number, locale: :en) — универсальный способ вызова без расширения базовых классов.
  • Num2words.to_currency(number) — преобразование число в валюту.

Консоль 💻

Num2words поддерживает интерактивную консоль для быстрого тестирования.
Это удобно при работе с разными числами и языками.

Запуск консоли

bin/console

После запуска появится приветственное сообщение:

👋 Добро пожаловать в консоль num2words!
Попробуйте: Num2words.to_words(2025)
-----------------------------------------------------

👉 Это позволяет проверять работу гема без написания отдельных скриптов.


🌍 Доступные локали (из коробки)

Язык ISO-код Валюта Файл
Английский en USD ($) en.yml
Русский ru RUB (₽) ru.yml
Китайский zh CNY (¥) zh.yml
Испанский es EUR (€) es.yml
Французский fr EUR (€) fr.yml
Немецкий de EUR (€) de.yml
Итальянский it EUR (€) it.yml
Португальский pt EUR (€) pt.yml
Арабский ar SAR (﷼) ar.yml
Хинди hi INR (₹) hi.yml
Японский ja JPY (¥) ja.yml
Корейский ko KRW (₩) ko.yml
Турецкий tr TRY (₺) tr.yml
Нидерландский nl EUR (€) nl.yml
Польский pl PLN (zł) pl.yml
Украинский uk UAH (₴) uk.yml
Чешский cs CZK (Kč) cs.yml
Румынский ro RON (lei) ro.yml
Болгарский bg BGN (лв) bg.yml
Белорусский be BYN (Br) be.yml
Казахский kz KZT (₸) kz.yml
Греческий el EUR (€) el.yml
Иврит he ILS (₪) he.yml
Шведский sv SEK (kr) sv.yml
Норвежский nb NOK (kr) nb.yml
Датский da DKK (kr) da.yml
Финский fi EUR (€) fi.yml
Венгерский hu HUF (Ft) hu.yml
Тайский th THB (฿) th.yml
Вьетнамский vi VND (₫) vi.yml
Индонезийский id IDR (Rp) id.yml
Персидский fa IRR (﷼) fa.yml
Сербский sr RSD (дин) sr.yml
Хорватский hr EUR (€) hr.yml
Словацкий sk EUR (€) sk.yml
Словенский sl EUR (€) sl.yml
Литовский lt EUR (€) lt.yml
Латышский lv EUR (€) lv.yml
Эстонский et EUR (€) et.yml
Малайский ms MYR (RM) ms.yml
Бенгальский bn BDT (৳) bn.yml
Урду ur PKR (₨) ur.yml
Тамильский ta INR (₹) ta.yml
Телугу te INR (₹) te.yml
Малаялам ml INR (₹) ml.yml
Каннада kn INR (₹) kn.yml
Маратхи mr INR (₹) mr.yml
Гуджарати gu INR (₹) gu.yml
Панджаби pa INR (₹) pa.yml
Суахили sw KES (Sh) sw.yml

Можно легко добавить новые:

  • YAML-файл: config/locales/xx.yml
  • Обёртка: lib/num2words/locales/xx.rb

🌍 Поддержка локалей (ru / en)

Возможность ru en
🔢 Числа (Integer)
🔢 Числа (Float)
💰 Валюта ✔ (рубли) ✔ (rubles)
💰 Валюта (short)
💱 Выбор валюты (USD/EUR/…)
📅 Дата
⏰ Время
🕓 Дата и время
📝 Краткая форма даты/времени

🧪 Тестирование

bundle exec rspec

📌 Roadmap

  • [x] 🇬🇧 Поддержка английского языка
  • [x] 🔠 Опция выбора регистра (строчные/Прописные)
  • [x] ⏰ Краткая форма даты/времени
  • [ ] 💵 Поддержка других валют (USD, EUR и т.д)
  • [ ] 💰 Краткая форма валюты

📜 Лицензия

MIT