Path: | README (CVS) |
Last Update: | Sat Dec 15 02:05:17 +0000 2007 |
RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils - сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой и приятной (в идеале - столь же простой как и разработку оных на английском)
Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode ‘u’). Стандартно работа RuTils проверяется как на стандартной версии Ruby, так и на парсере регулярных выражений Oniguruma (правда имейте в виду, что с ним Gilenson работает медленнее).
Пожалуйста упоминайте версию при сообщении ошибок. Версию RUTILS всегда можно узнать в константе
RuTils::VERSION
Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой RubyKanjiCode в своем httpd.conf.
Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за реализацию большинства алгоритмов на PHP.
Разработку RuTils ведут Julik и Mash
RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным учетом рода. Например:
4.propisju => "четыре" 345.propisju => "триста сорок пять" 231.propisju(2) => "двести тридцать одна" 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан" (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых четыре десятых сволочи"
Также реализуется выбор варианта числительного в зависимости от числа
15.items("кодер", "кодера", "кодеров") => "кодеров"
и вывод "суммы прописью" для денежных сумм
(413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
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 введены следующие константы:
* RU_MONTHNAMES (Январь Февраль Март...) * RU_DAYNAMES (Воскресенье Понедельник...) * RU_ABBR_MONTHNAMES (Янв Фев Мар...) * RU_ABBR_DAYNAMES (Вск Пн Вт Ср...) * RU_INFLECTED_MONTHNAMES (Января Февраля Марта...) * RU_DAYNAMES_E (первое второе третье...)
Пример использования:
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 как дополнение к Rails в одном конкретном приложении, скопируйте директорию rutils в папку vendor/plugins вашего приложения. Вы можете воспользоваться командой rutilize чтобы сделать это автоматически. После этого вы сможете использовать RuTils без необходимости установки gem’а на вашем сервере (не забудьте перезапустить приложение чтобы вгрузить в него RuTils).
$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
Вы можете свободно распространять RuTils со своим Rails-приложением при условии сохранения структуры и файла README.
Просто включите rutils в свою программу как gem
require_gem 'rutils'
или как библиотеку
require 'rutils'
На странице проекта на RubyForge
Нет и никогда не будет.
В настоящее время RuTils используется на следующих сайтах:
Если вы используете RuTils в своей работе пожалуйста сообщайте нам об этом чтобы мы могли включить ваши приложения и сайты в список.
Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите (по возможности) тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы можете скопировать из собственных тестов RuTils.
Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы, пожалуйста следуйте следующим правилам оформления кода:
Мы используем пробелы поскольку табулятор означает автозаполнение в IRB (Interactive Ruby Shell)
Если вы хотите участвовать в разработке RuTils пользуйтесь CVS проекта.