Path: | README.txt |
Last Update: | Tue Sep 23 06:37:40 +0000 2008 |
RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils - сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой и приятной (в идеале - столь же простой как и разработку оных на английском).
Разработчики RuTils - Julik, Mash, Yaroslav Markin
Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за реализацию большинства алгоритмов на PHP.
Просто включите rutils в свою программу как библиотеку
require 'rutils'
Для использования с Ruby on Rails установите RuTils как плагин (скопируйте библиотеку в vendor/plugins приложения).
RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным учетом рода. Например:
4.propisju => "четыре" 345.propisju => "триста сорок пять" 231.propisju(2) => "двести тридцать одна" 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан" (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых четыре десятых сволочи"
Также реализуется выбор варианта числительного в зависимости от числа
15.items("кодер", "кодера", "кодеров") => "кодеров"
и вывод "суммы прописью" для денежных сумм в рублях
(413.2).rublej => "четыреста тринадцать рублей двадцать копеек" 1.rubl => "один рубль" 22.rublja => "двадцать два рубля"
Если вы храните денежные единицы в целочисленных типах, пользуйтесь "копеечными" вариантами:
300.kopeek => "три рубля" 121.kopeika => "один рубль двадцать одна копейка"
RuTils на данный момент реализует простейший транслит "в одну сторону" и "взаимно-однозначный транслит" (BiDi-транслит).
Простейший транслит "в одну сторону".
"Вот такое вот дело".translify => "Vot takoye vot delo" "Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
Порт BiDiTranslit от Pixel Apes. Реализует транслитерацию "в обе стороны", предоставляя возможность получить валидный URL из строки, содержащей русские и английские буквы. С некоторыми потерями (запятых и прочих "слабозначащих" символов) возможно восстановление исходной строки.
Два режима работы:
"WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty" "+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl" "WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo" "+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
Gilenson - порт Typografica от Pixel Apes. Тыпографица - механизм автоматической расстановки подстановок в тексте перед его выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки и тому подобные "украшательства".
Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы, английские - для латиницы), заменит "хитрые" пунктуационные символы на entities и отформатирует знаки типа (c), (tm), телефоны и адреса.
%q{"И это называется языком?", -- таков был его вопрос}.gilensize => "«И это называется языком?», — таков был его вопрос"
Более подробная документация по Gilenson доступна в документах к RuTils::Gilenson::Formatter
В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать Unicode-тексты в среде UNIX пользуясь стандартным выводом
$ cat myfile.txt | gilensize > myfile.html
В класс Date введены следующие константы:
Пример использования:
require 'date' date = Date.new(2005, 11, 9) puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется "покрытие" стандартной функции Time#strftime ("родную" strftime можно продолжать использовать через alias-метод strftime_norutils):
Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь" Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
RuTils в первую очередь задумывался как максимально "прозрачный" механизм обработки русского текста в контексте Rails-приложения. В связи с этим RuTils "вторгается" в работу других Ruby-модулей и изменяет механизм их работы.
Если вы используете RuTils в одном приложении с RedCloth или BlueCloth, RuTils автоматически будет обрабатывать типографику во всех текстах, пропускаемых через них. Имейте в виду, что для корректной работы этой функции RuTils надо загружать *после* модулей RedCloth и BlueCloth.
Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
Перегрузку всех функций других модулей можно включать и отключать в любое время с помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние библиотеки будут работать в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки). Это нужно когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
Рекомендуемый способ использования RuTils с Ruby on Rails приложением — установка RuTils плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего приложения или воспользуйтесь командой rutilize путь_кrailsприложению чтобы сделать это автоматически. После этого вы сможете использовать RuTils без необходимости установки gem на вашем сервере (не забудьте перезапустить приложение чтобы вгрузить в него RuTils).
$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
Вы можете свободно распространять RuTils со своим Rails-приложением при условии сохранения структуры и файла README.
Rails, RedCloth и BlueCloth для выполнения тестов.
Нет и никогда не будет.
Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode ‘u’). Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой RubyKanjiCode в своем httpd.conf.
Сообщите об ошибке на странице проекта на RubyForge Не забудьте указать версию, ее всегда можно узнать в константе
RuTils::VERSION
Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы можете скопировать из собственных тестов RuTils.
Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы, пожалуйста следуйте следующим правилам оформления кода:
При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
разницу между двумя разными пробелами, например)
Если вы хотите участвовать в разработке RuTils пользуйтесь версией из subversion trunk.