带有语言环境的Ruby on Rails路由

tin*_*fni 5 routes ruby-on-rails internationalization

我正在使用本指南:http://edgeguides.rubyonrails.org/i18n.html

我想要的是什么:

/aboutpages#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而不使用区域设置)时,您将不会收到路由错误 .当您想要在未指定默认语言环境时使用默认语言环境时,这非常有用.

jhl*_*lnd 6

routes.rb中的第一行是一个包罗万象的路线

match '/:locale' => 'pages#news'
Run Code Online (Sandbox Code Playgroud)

它应该是文件中的最后一行,就在根路径之后.