[英]Ruby on Rails Routes with Locales
我正在使用本指南: http : //edgeguides.rubyonrails.org/i18n.html
我想要的是什么:
/about
使用en
的默認語言環境轉到pages#about
#out。
/en/about
使用en
的語言環境轉到pages#about
。
/es/about
轉到pages#about
用的語言環境es
。
我得到了什么:
/about
轉到root_path
,其語言環境為about
。
/en/about
使用en
的語言環境轉到pages#about
。
/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
如果我正確閱讀指南,第2.5節說我應該能夠訪問/about
並加載默認語言環境。
從2.5開始:
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
使用此方法,在訪問資源(例如http:// localhost:3001 / books而不使用區域設置)時,您將不會收到路由錯誤。 當您想要在未指定默認語言環境時使用默認語言環境時,這非常有用。
routes.rb中的第一行是一個包羅萬象的路線
match '/:locale' => 'pages#news'
它應該是文件中的最后一行,就在根路徑之后。
另一種方式是:
Possible_locales = /en|es/
match '/:locale' => 'pages#news', :locale => Possible_locales
scope "(:locale)", :locale => Possible_locales do
...
end
無需擔心路線順序。
這篇博文實際上非常詳細地解釋了它(Rails 4):
正是我在尋找什么似乎沒有任何作用
http://dhampik.com/blog/rails-routes-tricks-with-locales
scope "/:locale", locale: /#{I18n.available_locales.join("|")}/ do
resources :posts
root to: "main#index"
end
root to: redirect("/#{I18n.default_locale}", status: 302), as: :redirected_root
get "/*path", to: redirect("/#{I18n.default_locale}/%{path}", status: 302), constraints: {path: /(?!(#{I18n.available_locales.join("|")})\/).*/}, format: false
從root重定向到默認lang並執行許多其他操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.