Project

num2words

0.0
The project is in a healthy, maintained state
Converts integers and amounts to Russian words with proper gender and plural forms.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

>= 1.8
 Project Readme

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

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

📜 Лицензия

MIT