diff --git a/README.ru.rdoc b/README.ru.rdoc
index 2d974e7e..a2330887 100644
--- a/README.ru.rdoc
+++ b/README.ru.rdoc
@@ -21,7 +21,7 @@ Sinatra — это предметно-ориентированный карка
Результат можно увидеть: http://localhost:4567
Рекомендуется также установить thin, сделать это можно командой: gem install thin.
-Thin это более производительный и функциональный сервер для разработки приложений на Sinatra.
+Thin - это более производительный и функциональный сервер для разработки приложений на Sinatra.
== Маршруты
@@ -52,7 +52,7 @@ Thin это более производительный и функционал
.. что-то ответить ..
end
-Маршруты сверяются с запросом в порядке очередности их записи в файле приложения. Первый совпавший с запросом маршрут будет вызван.
+Маршруты сверяются с запросом в порядке очередности их записи в файле приложения. По умолчанию, будет вызван первый совпавший с запросом маршрут.
Шаблоны маршрутов могут включать в себя параметры доступные в
params xэше:
@@ -135,17 +135,17 @@ Thin это более производительный и функционал
=== Возвращаемые значения
Возвращаемое значение блока маршрута ограничивается телом ответа, которое будет передано HTTP клиенту,
-или следующей "прослойкой" (middleware, промежуточная программа) в Rack стеке. Чаще всего это строка, как в примерах выше.
+или следующей "прослойкой" (middleware) в Rack стеке. Чаще всего это строка, как в примерах выше.
Но и другие значения также приемлемы.
Вы можете вернуть любой объект, который будет либо корректным Rack ответом, объектом Rack body, либо кодом состояния HTTP:
-* Массив с тремя переменными: [status (Fixnum), headers (Hash), response body (должен отвечать на #each)]
-* Массив с двумя переменными: [status (Fixnum), response body (должен отвечать на #each)]
-* Объект, отвечающий на #each, который передает только строковые типы данных в этот блок
-* Fixnum, представляющий код состояния HTTP
+* массив с тремя переменными: [status (Fixnum), headers (Hash), response body (должен отвечать на #each)];
+* массив с двумя переменными: [status (Fixnum), response body (должен отвечать на #each)];
+* объект, отвечающий на #each, который передает только строковые типы данных в этот блок;
+* Fixnum, представляющий код состояния HTTP.
-Таким образом мы легко можем создать поточный пример:
+Таким образом, мы легко можем создать поточный пример:
class Stream
def each
@@ -195,10 +195,10 @@ Thin это более производительный и функционал
# ...
end
-== статическые файлы
+== Статические файлы
-статическые файлы отдаются из ./public директории. Вы можете указать другое место,
-указав его в :public опции:
+Статические файлы отдаются из ./public директории. Вы можете указать другое место,
+указав его через опцию :public:
set :public, File.dirname(__FILE__) + '/static'
@@ -388,7 +388,7 @@ Thin это более производительный и функционал
rdiscount gem/библиотека необходима для рендеринга Markdown шаблонов:
# Вам нужно будет подключить rdiscount в приложении
- require "rdiscount"
+ require 'rdiscount'
get '/' do
markdown :index
@@ -449,7 +449,7 @@ Thin это более производительный и функционал
RedCloth gem/библиотека необходима для рендеринга Textile шаблонов:
# Вам нужно будет подключить redcloth в приложении
- require "redcloth"
+ require 'redcloth'
get '/' do
textile :index
@@ -494,7 +494,7 @@ Thin это более производительный и функционал
rdoc gem/библиотека необходима для рендеринга RDoc шаблонов:
# Вам нужно будет подключить rdoc/markup/to_html в приложении
- require "rdoc/markup/to_html"
+ require 'rdoc/markup/to_html'
get '/' do
rdoc :index
@@ -589,13 +589,13 @@ Thin это более производительный и функционал
Вам понадобится coffee-script gem/библиотека и что-то одно из следующего списка,
чтобы запускать JavaScript:
-* +node+ (из Node.js)
-* вы можете использовать OSX (есть встроенные средства для выполнения JavaScript)
-* +therubyracer+ gem/библиотека
+* +node+ (из Node.js);
+* вы можете использовать OS X (в которой есть встроенные средства для выполнения JavaScript);
+* +therubyracer+ gem/библиотека.
Подробнее смотрите на {странице проекта}[http://github.com/josh/ruby-coffee-script].
-Таким образом вы можете использовать CoffeeScript шаблоны.
+Таким образом, вы можете использовать CoffeeScript шаблоны.
# Вам нужно будет подключить coffee-script gem в приложении
require 'coffee-script'
@@ -612,7 +612,7 @@ Thin это более производительный и функционал
haml '%div.title Hello World'
end
-Отобразит встроенный (строчный) шаблон.
+Отобразит строку встроенного шаблона.
=== Доступ к переменным в шаблонах
@@ -631,7 +631,7 @@ Thin это более производительный и функционал
haml '%h1= foo.name', :locals => { :foo => foo }
end
-Это обычный подход, когда шаблоны рендерятся как частные (partials) из других шаблонов.
+Это обычный подход, когда шаблоны рендерятся как части других шаблонов.
=== Вложенные шаблоны
@@ -652,7 +652,7 @@ Thin это более производительный и функционал
@@ index
%div.title Hello world!!!!!
-Заметьте: вложенные шаблоны, определенные в файле-исходнике, который подключил Sinatra, будут
+Заметьте: вложенные шаблоны, определенные в исходном файле, который подключила Sinatra, будут
автоматически загружены. Вызовите enable :inline_templates напрямую, если у вас вложенные
шаблоны в других файлах.
@@ -672,8 +672,8 @@ Thin это более производительный и функционал
haml :index
end
-Если шаблон с именем "layout" существует, то он будет использован каждый раз,
-когда шаблоны будут отрисовываться. Вы можете отключать лэйаут в каждом конкретном случае с помощью
+Если шаблон с именем "layout" существует, то он будет использоваться каждый раз
+при рендеринге. Вы можете отключать лэйаут (разметку) в каждом конкретном случае с помощью
:layout => false или отключить его для всего приложения, например, так: set :haml, :layout => false:
get '/' do
@@ -682,7 +682,7 @@ Thin это более производительный и функционал
=== Привязка файловых расширений
-Чтобы связать расширение файла и движок рендеринга, используйте
+Чтобы связать расширение файла с движком рендеринга, используйте
Tilt.register. Например, если вы хотите использовать расширение +tt+
для шаблонов Textile:
@@ -782,7 +782,7 @@ Thin это более производительный и функционал
end
Заметьте, что при использовании enable :sessions все данные
-сохраняются в куки. Это может быть не совсем то, что вы хотите (например,
+сохраняются в cookies. Это может быть не совсем то, что вы хотите (например,
сохранение больших объемов данных увеличит ваш трафик). В таком случае вы
можете использовать альтернативную Rack "прослойку" (middleware), реализующую
механизм сессий. Для этого *не надо* вызывать enable :sessions,
@@ -908,7 +908,7 @@ Thin это более производительный и функционал
Как и +body+, методы +headers+ и +status+, вызванные без аргументов, возвращают
свои текущие значения.
-=== Логгирование
+=== Логирование
В области видимости запроса метод +logger+ предоставляет доступ к экземпляру +Logger+:
@@ -917,11 +917,11 @@ Thin это более производительный и функционал
# ...
end
-Этот логгер автоматически учитывает ваши настройки логгирования в Rack. Если
-логгирование выключено, то этот метод вернет пустой (dummy) объект, поэтому вы можете
+Этот логер автоматически учитывает ваши настройки логирования в Rack. Если
+логирование выключено, то этот метод вернет пустой (dummy) объект, поэтому вы можете
смело использовать его в маршрутах и фильтрах.
-Заметьте, что логгирование включено по умолчанию только для Sinatra::Application,
+Заметьте, что логирование включено по умолчанию только для Sinatra::Application,
а если ваше приложение -- подкласс Sinatra::Base, то вы, наверное, захотите включить
его вручную:
@@ -1022,9 +1022,9 @@ Thin это более производительный и функционал
end
Чтобы как следует использовать кэши, вам следует подумать об использовании
-+etag+ и +last_modified+. Рекомендуется использовать эти методы *до*
++etag+ и +last_modified+. Рекомендуется использовать эти методы-помощники *до*
выполнения "тяжелых" вычислений, так как они немедленно отправят ответ клиенту,
-если текущая версия уже есть в его кэше:
+если текущая версия уже есть в их кэше:
get '/article/:id' do
@article = Article.find params[:id]
@@ -1033,7 +1033,7 @@ Thin это более производительный и функционал
erb :article
end
-Так же вы можете использовать
+Также вы можете использовать
{weak ETag}[http://en.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation]:
etag @article.sha1, :weak
@@ -1042,8 +1042,8 @@ Thin это более производительный и функционал
необходимую информацию для вашего кэша. Если вы ищите легкое решение для
кэширования, попробуйте {rack-cache}[http://rtomayko.github.com/rack-cache/]:
- require "rack/cache"
- require "sinatra"
+ require 'rack/cache'
+ require 'sinatra'
use Rack::Cache
@@ -1192,8 +1192,8 @@ Thin это более производительный и функционал
а вызывает заданный блок для всех возможных путей. Дело тут не в производительности,
дело в том, что +render+ вызовет +break+, как только файл не будет найден.
Содержимое и местонахождение шаблонов будет закэшировано, если приложение запущено не
-в режиме разработки. Вы должны помнить об этих нюансах, если пишите по-настоящему
-сумашедший метод.
+в режиме разработки (set :environment, :development). Вы должны помнить об этих нюансах,
+если пишите по-настоящему "сумашедший" метод.
== Конфигурация
@@ -1274,7 +1274,7 @@ Thin это более производительный и функционал
[environment] текущее окружение, по умолчанию, значение ENV['RACK_ENV']
или "development", если ENV['RACK_ENV'] не доступна.
-[logging] использовать логгер.
+[logging] использовать логер.
[lock] создает блокировку для каждого запроса, которая гарантирует обработку
только одного запроса в текущий момент времени в Ruby процессе.
@@ -1290,7 +1290,7 @@ Thin это более производительный и функционал
встроенным сервером.
[prefixed_redirects] добавлять или нет параметр request.script_name к редиректам,
- если не задан абсолютный путь. Таким образом redirect '/foo'
+ если не задан абсолютный путь. Таким образом, redirect '/foo'
будет вести себя как redirect to('/foo'). Отключено по умолчанию.
[public] директория, откуда будут раздаваться статические файлы.
@@ -1328,7 +1328,7 @@ Thin это более производительный и функционал
Обработчики ошибок исполняются в том же контексте, что и маршруты, +before+-фильтры, а это означает, что всякие
прелести вроде haml, erb, halt и т.д. доступны и им.
-=== NotFound
+=== Not Found
Когда выброшено исключение Sinatra::NotFound, или кодом ответа является 404,
то будет вызван not_found обработчик:
@@ -1411,7 +1411,7 @@ Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] DSL
end
Rack распространяется с различными стандартными "прослойками"
-для логгирования, отладки, маршрутизации URL, аутентификации, обработки сессий. Sinatra использует
+для логирования, отладки, маршрутизации URL, аутентификации, обработки сессий. Sinatra использует
многие из этих компонентов автоматически, основываясь на конфигурации, чтобы вам не приходилось
подключать (+use+) их вручную.
@@ -1454,9 +1454,9 @@ Rack распространяется с различными стандартн
Описание своего приложения самым простейшим способом (с помощью DSL верхнего уровня, как в примерах выше)
работает отлично для крохотных приложений, но имеет множество недостатков, когда надо создать компоненты, такие как
-Rack middleware ("прослойки"), Rails metal, простые библиотеки с серверными компонентами,
-расширения Sinatra.
-DSL верхнего уровня загрязняет пространство имен Object и подразумевает стиль конфигурации
+Rack middleware ("прослойки"), Rails metal, простые библиотеки с серверными компонентами, расширения Sinatra.
+
+DSL верхнего уровня "загрязняет" пространство имен Object и подразумевает стиль конфигурации
микро-приложения (например, единый файл приложения, ./public и
./views директории, создание логов, страницу деталей об исключениях
и т.д.). И тут на помощь приходит Sinatra::Base:
@@ -1562,8 +1562,8 @@ Rack-совместимый сервер приложений.
Вот несколько причин, по которым вы, возможно, захотите использовать config.ru:
* вы хотите разворачивать свое приложение на различных Rack-совместимых серверах (Passenger, Unicorn,
- Heroku, ...).
-* вы хотите использовать более одного подкласса Sinatra::Base.
+ Heroku, ...);
+* вы хотите использовать более одного подкласса Sinatra::Base;
* вы хотите использовать Sinatra только в качестве "прослойки" Rack.
Совсем необязательно переходить на использование config.ru лишь потому, что вы стали
@@ -1573,7 +1573,7 @@ Rack-совместимый сервер приложений.
=== Использование Sinatra в качестве "прослойки"
Не только сам Sinatra может использовать "прослойки" Rack, но и любое Sinatra приложение
-само может быть добавлено к любому Rack эндпоинту в качестве "прослойки". Этим эндпоинтом
+само может быть добавлено к любому Rack endpoint в качестве "прослойки". Этим endpoint (конечной точкой)
может быть другое Sinatra приложение, или приложение, основанное на Rack (Rails/Ramaze/Camping/...):
require 'sinatra/base'
@@ -1633,15 +1633,15 @@ Sinatra::Application, иначе это будет подкласс, котор
У вас будет область видимости приложения внутри:
-* Тела вашего класса приложения
-* Методов, определенных расширениями
-* Блока, переданного в +helpers+
-* Блоков, использованных как значения для +set+
+* тела вашего класса приложения;
+* методов, определенных расширениями;
+* блока, переданного в +helpers+;
+* блоков, использованных как значения для +set+.
Вы можете получить доступ к объекту области видимости (классу приложения) следующими способами:
-* объект, переданный блокам конфигурации (configure { |c| ... })
-* +settings+ внутри области видимости запроса
+* через объект, переданный блокам конфигурации (configure { |c| ... });
+* +settings+ внутри области видимости запроса.
=== Область видимости запроса/экземпляра
@@ -1649,7 +1649,7 @@ Sinatra::Application, иначе это будет подкласс, котор
и все блоки обработчика будут запущены в этом контексте. В этой области
видимости вам доступны +request+ и +session+ объекты, вызовы методов
рендеринга, такие как +erb+ или +haml+. Вы можете получить доступ к
-области видимости приложения из контекста запроса, используя помощник +settings+:
+области видимости приложения из контекста запроса, используя метод-помощник +settings+:
class MyApp < Sinatra::Base
# Я в области видимости приложения!
@@ -1668,10 +1668,10 @@ Sinatra::Application, иначе это будет подкласс, котор
У вас будет область видимости запроса внутри:
-* get/head/post/put/delete/options блоков
-* before/after фильтрах
-* методах-помощниках
-* шаблонах/отображениях
+* get/head/post/put/delete/options блоков;
+* before/after фильтрах;
+* методах-помощниках;
+* шаблонах/отображениях.
=== Область видимости делегирования
@@ -1685,8 +1685,8 @@ Sinatra::Application, иначе это будет подкласс, котор
У вас будет контекст делегирования внутри:
-* Привязки верхнего уровня, если вы сделали require "sinatra"
-* Объекта, расширенного с помощью Sinatra::Delegator
+* привязки верхнего уровня, если вы сделали require 'sinatra';
+* объекта, расширенного с помощью Sinatra::Delegator.
Посмотрите сами в код: тут
{Sinatra::Delegator примесь}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
@@ -1700,11 +1700,11 @@ Sinatra приложения могут быть запущены напряму
Опции включают:
- -h # помощь
- -p # указать порт (по умолчанию 4567)
- -o # указать хост (по умолчанию 0.0.0.0)
- -e # указать окружение, режим (по умолчанию development)
- -s # указать rack сервер/обработчик (по умолчанию thin)
+ -h # раздел помощи
+ -p # указание порта (по умолчанию 4567)
+ -o # указание хоста (по умолчанию 0.0.0.0)
+ -e # указание окружения, режима (по умолчанию development)
+ -s # указание rack сервера/обработчика (по умолчанию thin)
-x # включить мьютекс-блокировку (по умолчанию выключена)
== Системные требования
@@ -1721,7 +1721,7 @@ Sinatra приложения могут быть запущены напряму
версия весьма не стабильна при использовании Sinatra.
[ Rubinius ]
- Rubinius официально поддерживается (Rubinius >= 1.2.3), все, включая все
+ Rubinius официально поддерживается (Rubinius >= 1.2.3), всё, включая все
языки шаблонов, работает.
[ JRuby ]
@@ -1733,15 +1733,15 @@ Sinatra приложения могут быть запущены напряму
Ruby 1.8.6 больше не поддерживается.
-Мы также следим за предстоящими версиями Ruby.
+Мы также следим за предстоящими к выходу версиями Ruby.
Следующие реализации Ruby не поддерживаются официально, но известно, что на
них запускается Sinatra:
-* Старые версии JRuby и Rubinius
-* MacRuby, Maglev, IronRuby
-* Ruby 1.9.0 и 1.9.1
-* Ruby 1.8.6 с помощью {backports}[https://github.com/marcandre/backports/#readme]
+* старые версии JRuby и Rubinius;
+* MacRuby, Maglev, IronRuby;
+* Ruby 1.9.0 и 1.9.1;
+* Ruby 1.8.6 с помощью {backports}[https://github.com/marcandre/backports/#readme].
То, что версия официально не поддерживается, означает, что, если что-то не
работает на этой версии, а на поддерживаемой работает - это не наша проблема, а их.
@@ -1761,7 +1761,7 @@ Sinatra должна работать на любой операционной
gem install sinatra --pre
-Чтобы воспользоваться некоторыми самыми последними возможностям.
+Чтобы воспользоваться некоторыми самыми последними возможностями.
=== С помощью Bundler
@@ -1823,10 +1823,10 @@ SemVerTag.
== Дальнейшее чтение
-* {Вебсайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация,
+* {Веб-сайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация,
новости и ссылки на другие ресурсы.
-* {Участие}[http://www.sinatrarb.com/contributing] - Обнаружили баг? Нужна помощь? Написали патч?
-* {Слежение за проблемами}[http://github.com/sinatra/sinatra/issues]
+* {Участие в проекте}[http://www.sinatrarb.com/contributing] - Обнаружили баг? Нужна помощь? Написали патч?
+* {Слежение за проблемами/ошибками}[http://github.com/sinatra/sinatra/issues]
* {Twitter}[http://twitter.com/sinatra]
-* {Лист рассылки}[http://groups.google.com/group/sinatrarb/topics]
-* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] on http://freenode.net
+* {Группы рассылки}[http://groups.google.com/group/sinatrarb/topics]
+* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] on http://freenode.net