tin*_*fni 5 routes ruby-on-rails internationalization
我正在使用本指南:http://edgeguides.rubyonrails.org/i18n.html
我想要的是什么:
/about去pages#about用的拖欠区域en.
/en/about转到pages#about的语言环境en.
/es/about转到pages#about的语言环境es.
我得到了什么:
/about转到root_path的语言环境about.
/en/about转到pages#about的语言环境en.
/es/about转到pages#about的语言环境es.
这是一些代码:
# config/routes.rb
match '/:locale' => 'pages#news'
scope "(:locale)", :locale => /en|es/ do
match '/abcd' => 'pages#abcd'
match '/plan' => 'pages#plan'
match '/about' => 'pages#about'
match '/history' => 'pages#history'
match '/projects' => 'pages#projects'
match '/donate' => 'pages#donate'
match '/opportunities' => 'pages#opportunities'
match '/board' => 'pages#board'
end
root :to => "pages#news"
# app/controller/application_controller.rb
before_filter :set_locale
def set_locale
# if params[:locale] is nil then I18n.default_locale will be used
I18n.locale = params[:locale]
end
def default_url_options(options={})
{ :locale => I18n.locale }
end
Run Code Online (Sandbox Code Playgroud)
如果我正确阅读指南,第2.5节说我应该能够访问/about并加载默认语言环境.
从2.5开始:
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
Run Code Online (Sandbox Code Playgroud)
使用此方法,在访问资源(例如http:// localhost:3001/books而不使用区域设置)时,您将不会收到路由错误 .当您想要在未指定默认语言环境时使用默认语言环境时,这非常有用.
routes.rb中的第一行是一个包罗万象的路线
match '/:locale' => 'pages#news'
Run Code Online (Sandbox Code Playgroud)
它应该是文件中的最后一行,就在根路径之后.