2010-12-20 42 views
5

我使用本指南:http://edgeguides.rubyonrails.org/i18n.htmlRuby on Rails的路线与区域设置

我想什么:

​​去pages#abouten的违约语言环境。

/en/about转到pages#about,区域设置为en

/es/about转到pages#about,区域设置为es

我得到什么:

​​去root_pathabout的语言环境。

/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节说我应该能够访问​​,并把它加载默认的语言环境。

从2.5:

# config/routes.rb 
scope "(:locale)", :locale => /en|nl/ do 
    resources :books 
end 

通过这种方法访问您的 资源,如 http://localhost:3001/books时没有 区域,那么你不会得到一个 路由错误。当 想要使用缺省语言环境时,此选项非常有用,如果未指定 。

回答

6

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

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

应该是文件中的最后一行,根路径之后。

+0

哦!现在我明白了。谢谢!这是完美的。 – tinifni 2010-12-20 13:06:42

4

另一种方法是:

Possible_locales = /en|es/ 

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

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

无需担心线路的顺序。

+0

谢谢!很高兴知道我在建立路线时还有哪些其他选择。 – tinifni 2011-04-08 17:00:19

1

我这篇文章实际上说明非常详细(轨道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 

重定向从根默认郎并做了很多其他的事情。