我正在使用本指南: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
如果我正确阅读指南,第2.5节说我应该能够访问/about
并让它加载默认语言环境。
从2.5:
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
通过这种方法你不会得到一个 访问您的路由错误 资源如 http://localhost:3001/books没有 语言环境。这对你来说非常有用 想要在使用时使用默认语言环境 一个未指定。
答案 0 :(得分:6)
routes.rb中的第一行是一个包罗万象的路线
match '/:locale' => 'pages#news'
它应该是文件中的最后一行,就在根路径之后。
答案 1 :(得分:4)
另一种方式是:
Possible_locales = /en|es/
match '/:locale' => 'pages#news', :locale => Possible_locales
scope "(:locale)", :locale => Possible_locales do
...
end
无需担心路线顺序。
答案 2 :(得分:1)
这篇博文实际上非常详细地解释了它(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重定向到默认语言并执行很多其他操作。