Ruby on Rails 路由与本地化

5
我在使用这个指南:http://edgeguides.rubyonrails.org/i18n.html 我想要的是:
- /about 转到默认语言为 enpages#about。 - /en/about 转到语言为 enpages#about。 - /es/about 转到语言为 espages#about
但实际上得到的是:
- /about 转到 root_path,语言为 about。 - /en/about 转到语言为 enpages#about。 - /es/about 转到语言为 espages#about
以下是一些代码:
# 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 的资源时,即使没有指定语言环境,也不会出现路由错误。当您希望在未指定语言环境时使用默认语言环境时,此方法非常有用。
3个回答

6
您的routes.rb文件中的第一行是一个万能路由。
match '/:locale' => 'pages#news'

应该将其放在文件的最后一行,紧跟着根路由。

4
另一种方法是:
Possible_locales = /en|es/

match '/:locale' => 'pages#news', :locale => Possible_locales

scope "(:locale)", :locale => Possible_locales do
   ...
end

无需担心路由顺序。

谢谢!很好知道我在设置路由时还有其他选项。 - tinifni

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

将重定向到默认语言并执行许多其他操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接