1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00

Translation improvements

This commit is contained in:
wuleicanada 2013-11-09 16:18:43 -05:00
parent 116504fada
commit 9c47e6fa0a

View file

@ -1,10 +1,10 @@
# Sinatra # Sinatra
*注:本文档仅仅是英文版的翻译,会出现内容没有及时更新的情况发生 *注:本文档是英文版的翻译,内容更新有可能不及时
如有不一致的地方,请以英文版为准。* 如有不一致的地方,请以英文版为准。*
Sinatra是一个基于Ruby语言以最小精力为代价快速创建web应用为目的的[DSL](http://en.wikipedia.org/wiki/Domain-specific_language) Sinatra是一个基于Ruby语言的[DSL](http://en.wikipedia.org/wiki/Domain-specific_language)
领域专属语言) 领域专属语言)可以轻松、快速的创建web应用。
~~~~ ruby ~~~~ ruby
# myapp.rb # myapp.rb
@ -15,7 +15,7 @@ get '/' do
end end
~~~~ ~~~~
安装gem然后运行 安装gem然后运行:
~~~~ shell ~~~~ shell
gem install sinatra gem install sinatra
@ -24,33 +24,43 @@ ruby myapp.rb
在该地址查看: [localhost:4567](http://localhost:4567) 在该地址查看: [localhost:4567](http://localhost:4567)
推荐同时运行`gem install thin`Sinatra会优先选择thin作为服务器。 安装Sintra后最好再运行`gem install thin`安装Thin。这样Sinatra会优先选择Thin作为服务器。
## 路由 ## 路由(route)
在Sinatra中一个路由是一个HTTP方法与URL匹配范式的配对 在Sinatra中一个路由分为两部分HTTP方法(GET, POST等)和URL匹配范式
每个路由都与一个代码块关联 每个路由都有一个要执行的代码块
~~~~ ruby ~~~~ ruby
get '/' do get '/' do
.. 显示一些事物 .. .. 显示内容 ..
end end
post '/' do post '/' do
.. 创建一些事物 .. .. 创建内容 ..
end end
put '/' do put '/' do
.. 更新一些事物 .. .. 更新内容 ..
end end
delete '/' do delete '/' do
.. 消灭一些事物 .. .. 删除内容 ..
end end
options '/' do options '/' do
.. 满足一些事物 .. .. 显示命令列表 ..
end end
link '/' do
.. 建立某种联系 ..
end
unlink '/' do
.. 解除某种联系 ..
end
~~~~ ~~~~
路由按照它们被定义的顺序进行匹配。 第一个与请求匹配的路由会被调用。 路由按照它们被定义的顺序进行匹配。 第一个与请求匹配的路由会被调用。
@ -133,7 +143,7 @@ get '/', :provides => ['rss', 'atom', 'xml'] do
end end
~~~~ ~~~~
你也可以很轻松地定义自己的条件: 你也可以自定义条件:
~~~~ ruby ~~~~ ruby
set(:probability) { |value| condition { rand <= value } } set(:probability) { |value| condition { rand <= value } }
@ -206,7 +216,7 @@ get all_but("/index") do
end end
~~~~ ~~~~
请注意上面的例子可能超工程了, 因为它也可以用更简单的方式表述: 上面的例子可能太繁琐了, 因为它也可以用更简单的方式表述:
~~~~ ruby ~~~~ ruby
get // do get // do
@ -287,7 +297,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.erb` 这里调用的是 `./views/index.erb`
### Erubis ### Erubis
@ -302,7 +312,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.erubis` 这里调用的是 `./views/index.erubis`
使用Erubis代替Erb也是可能的: 使用Erubis代替Erb也是可能的:
@ -330,7 +340,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.builder` 这里调用的是 `./views/index.builder`
### Nokogiri 模板 ### Nokogiri 模板
@ -345,7 +355,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.nokogiri` 这里调用的是 `./views/index.nokogiri`
### Sass 模板 ### Sass 模板
@ -360,7 +370,7 @@ get '/stylesheet.css' do
end end
~~~~ ~~~~
渲染 `./views/stylesheet.sass` 这里调用的是 `./views/stylesheet.sass`
[Sass [Sass
的选项](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options) 的选项](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
@ -389,7 +399,7 @@ get '/stylesheet.css' do
end end
~~~~ ~~~~
渲染 `./views/stylesheet.scss` 这里调用的是 `./views/stylesheet.scss`
[Scss的选项](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options) [Scss的选项](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options)
可以通过Sinatra选项全局设定 参考 可以通过Sinatra选项全局设定 参考
@ -417,7 +427,7 @@ get '/stylesheet.css' do
end end
~~~~ ~~~~
渲染 `./views/stylesheet.less` 这里调用的是 `./views/stylesheet.less`
### Liquid 模板 ### Liquid 模板
@ -432,7 +442,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.liquid` 这里调用的是 `./views/index.liquid`
因为你不能在Liquid 模板中调用 Ruby 方法 (除了 `yield`) 因为你不能在Liquid 模板中调用 Ruby 方法 (除了 `yield`)
你几乎总是需要传递locals给它 你几乎总是需要传递locals给它
@ -454,7 +464,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.markdown` (`md``mkd` 也是合理的文件扩展名)。 这里调用的是 `./views/index.markdown` (`md``mkd` 也是合理的文件扩展名)。
在markdown中是不可以调用方法的也不可以传递 locals给它。 在markdown中是不可以调用方法的也不可以传递 locals给它。
你因此一般会结合其他的渲染引擎来使用它: 你因此一般会结合其他的渲染引擎来使用它:
@ -480,7 +490,7 @@ get '/' do
end end
~~~~ ~~~~
这将会渲染 `./views/index.md` 并使用 `./views/layout.erb` 作为布局。 这将会调用 `./views/index.md` 并使用 `./views/layout.erb` 作为布局。
请记住你可以全局设定这个选项: 请记住你可以全局设定这个选项:
@ -492,7 +502,7 @@ get '/' do
end end
~~~~ ~~~~
这将会渲染 `./views/index.markdown` (和任何其他的 Markdown 模版) 并使用 这将会调用 `./views/index.markdown` (和任何其他的 Markdown 模版) 并使用
`./views/post.haml` 作为布局. `./views/post.haml` 作为布局.
也可能使用BlueCloth而不是RDiscount来解析Markdown文件: 也可能使用BlueCloth而不是RDiscount来解析Markdown文件:
@ -524,7 +534,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.textile` 这里调用的是 `./views/index.textile`
在textile中是不可以调用方法的也不可以传递 locals给它。 在textile中是不可以调用方法的也不可以传递 locals给它。
你因此一般会结合其他的渲染引擎来使用它: 你因此一般会结合其他的渲染引擎来使用它:
@ -563,7 +573,7 @@ get '/' do
end end
~~~~ ~~~~
这将会渲染 `./views/index.textile` (和任何其他的 Textile 模版) 并使用 这将会调用 `./views/index.textile` (和任何其他的 Textile 模版) 并使用
`./views/post.haml` 作为布局. `./views/post.haml` 作为布局.
### RDoc 模板 ### RDoc 模板
@ -580,7 +590,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.rdoc` 这里调用的是 `./views/index.rdoc`
在rdoc中是不可以调用方法的也不可以传递locals给它。 在rdoc中是不可以调用方法的也不可以传递locals给它。
你因此一般会结合其他的渲染引擎来使用它: 你因此一般会结合其他的渲染引擎来使用它:
@ -606,7 +616,7 @@ get '/' do
end end
~~~~ ~~~~
这将会渲染 `./views/index.rdoc` 并使用 `./views/layout.erb` 作为布局。 这将会调用 `./views/index.rdoc` 并使用 `./views/layout.erb` 作为布局。
请记住你可以全局设定这个选项: 请记住你可以全局设定这个选项:
@ -618,7 +628,7 @@ get '/' do
end end
~~~~ ~~~~
这将会渲染 `./views/index.rdoc` (和任何其他的 RDoc 模版) 并使用 这将会调用 `./views/index.rdoc` (和任何其他的 RDoc 模版) 并使用
`./views/post.haml` 作为布局. `./views/post.haml` 作为布局.
### Radius 模板 ### Radius 模板
@ -634,7 +644,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.radius` 这里调用的是 `./views/index.radius`
因为你不能在Radius 模板中调用 Ruby 方法 (除了 `yield`) 因为你不能在Radius 模板中调用 Ruby 方法 (除了 `yield`)
你几乎总是需要传递locals给它 你几乎总是需要传递locals给它
@ -656,7 +666,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.mab` 这里调用的是 `./views/index.mab`
你也可以使用嵌入的 Markaby: 你也可以使用嵌入的 Markaby:
@ -679,7 +689,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.slim` 这里调用的是 `./views/index.slim`
### Creole 模板 ### Creole 模板
@ -694,7 +704,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.creole` 这里调用的是 `./views/index.creole`
### CoffeeScript 模板 ### CoffeeScript 模板
@ -711,7 +721,7 @@ end
[github.com/josh/ruby-coffee-script](http://github.com/josh/ruby-coffee-script) [github.com/josh/ruby-coffee-script](http://github.com/josh/ruby-coffee-script)
获取更新的选项。 获取更新的选项。
现在你可以渲染 CoffeeScript 模版了: 现在你可以调用 CoffeeScript 模版了:
~~~~ ruby ~~~~ ruby
# 需要在你的应用中引入coffee-script # 需要在你的应用中引入coffee-script
@ -722,7 +732,7 @@ get '/application.js' do
end end
~~~~ ~~~~
渲染 `./views/application.coffee` 这里调用的是 `./views/application.coffee`
### 嵌入模板字符串 ### 嵌入模板字符串
@ -732,7 +742,7 @@ get '/' do
end end
~~~~ ~~~~
渲染嵌入模板字符串。 调用嵌入模板字符串。
### 在模板中访问变量 ### 在模板中访问变量
@ -836,7 +846,7 @@ get '/' do
end end
~~~~ ~~~~
渲染 `./views/index.myat`。察看 这里调用的是 `./views/index.myat`。察看
[github.com/rtomayko/tilt](https://github.com/rtomayko/tilt) [github.com/rtomayko/tilt](https://github.com/rtomayko/tilt)
来更多了解Tilt. 来更多了解Tilt.
@ -1019,7 +1029,7 @@ end
如果你希望请求被发送到同一个应用,而不是副本, 使用 `call!` 而不是 如果你希望请求被发送到同一个应用,而不是副本, 使用 `call!` 而不是
`call`. `call`.
察看 Rack specification 如果你想更多了解 `call`. 如果想更多了解 `call`,请察看 Rack specification。
### 设定 消息体,状态码和消息头 ### 设定 消息体,状态码和消息头
@ -1056,16 +1066,16 @@ end
如同 `body`, 不带参数的 `headers``status` 可以用来访问 如同 `body`, 不带参数的 `headers``status` 可以用来访问
他们你的当前值. 他们你的当前值.
### 媒体类型 ### 媒体(MIME)类型
当使用 `send_file` 或者静态文件的场合,你的媒体类型可能 使用 `send_file` 或者静态文件的时候Sinatra可能不能识别你的媒体类型。
Sinatra并不理解。使用 `mime_type` 通过文件扩展名来注册它们: 使用 `mime_type` 通过文件扩展名来注册它们:
~~~~ ruby ~~~~ ruby
mime_type :foo, 'text/foo' mime_type :foo, 'text/foo'
~~~~ ~~~~
你也可以通过 `content_type` 辅助方法使用 你也可以使用 `content_type` 辅助方法
~~~~ ruby ~~~~ ruby
get '/' do get '/' do
@ -1082,7 +1092,7 @@ end
%a{:href => url('/foo')} foo %a{:href => url('/foo')} foo
~~~~ ~~~~
它会根据反向代理和Rack路由如果有的话来计算生成的URL 如果使用反向代理和Rack路由生成URL的时候会考虑这些因素
这个方法还有一个别名 `to` (见下面的例子). 这个方法还有一个别名 `to` (见下面的例子).
@ -1096,14 +1106,14 @@ get '/foo' do
end end
~~~~ ~~~~
任何额外的参数都会被以 `halt`相同的方式来处理: 其他参数的用法,与 `halt`相同:
~~~~ ruby ~~~~ ruby
redirect to('/bar'), 303 redirect to('/bar'), 303
redirect 'http://google.com', 'wrong place, buddy' redirect 'http://google.com', 'wrong place, buddy'
~~~~ ~~~~
你可以方便的通过 `redirect back`把用户重定向到来自的页面: `redirect back`可以把用户重定向到原始页面:
~~~~ ruby ~~~~ ruby
get '/foo' do get '/foo' do
@ -1116,13 +1126,13 @@ get '/bar' do
end end
~~~~ ~~~~
为了传递参数给redirect或者加入query: 如果想传递参数给redirect可以用query string:
~~~~ ruby ~~~~ ruby
redirect to('/bar?sum=42') redirect to('/bar?sum=42')
~~~~ ~~~~
或者使用session: 或者用session:
~~~~ ruby ~~~~ ruby
enable :sessions enable :sessions
@ -1139,9 +1149,9 @@ end
### 缓存控制 ### 缓存控制
正确地设定消息头是恰当的HTTP缓存的基础 要使用HTTP缓存必须正确地设定消息头。
你可以方便的设定 Cache-Control 消息头,像这样: 你可以这样设定 Cache-Control 消息头:
~~~~ ruby ~~~~ ruby
get '/' do get '/' do
@ -1167,9 +1177,10 @@ before do
end end
~~~~ ~~~~
为了合适地使用缓存,你应该考虑使用 `etag``last_modified`方法。. 为了合适地使用缓存,你应该考虑使用 `etag``last_modified`方法。
推荐在执行繁重任务\*之前\*使用这些helpers 推荐在执行繁重任务\*之前\*使用这些helpers这样一来
他们会立刻发送响应,如果客户端在缓存中已经有了当前版本。 如果客户端在缓存中已经有相关内容,就会立即得到显示。
~~~~ ruby ~~~~ ruby
get '/article/:id' do get '/article/:id' do
@ -1243,7 +1254,7 @@ send_file 'foo.png', :type => :jpg
<dd>Content-Length 的值,默认是文件的大小。</dd> <dd>Content-Length 的值,默认是文件的大小。</dd>
</dl> </dl>
如果Rack处理器支持Ruby进程除streaming以外的方式会被使用 如果Rack处理器支持的话Ruby进程也能使用除streaming以外的方法
如果你使用这个辅助方法, Sinatra会自动处理range请求。 如果你使用这个辅助方法, Sinatra会自动处理range请求。
### 访问请求对象 ### 访问请求对象