2010-12-20 4 views
5

Ich bin mit dieser Anleitung: http://edgeguides.rubyonrails.org/i18n.htmlRuby on Rails Routen mit Locales

Was ich möchte:

/about geht an pages#about mit dem notleidenden locale von en.

/en/about geht zu pages#about mit dem Gebietsschema en.

/es/about geht zu pages#about mit dem Gebietsschema es.

Was erhalte ich:

/about mit den Lokalisierungs von about-root_path geht.

/en/about geht zu pages#about mit dem Gebietsschema en.

/es/about geht zu pages#about mit dem Gebietsschema es. Hier

ist ein Code:

# 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 

Wenn ich die Führung richtig lese, Abschnitt 2.5, so dass ich in der Lage sollte /about zugreifen und haben sie das Standardgebietsschema laden.

von 2,5:

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

Mit diesem Ansatz werden Sie keine Routing-Fehler erhalten, wenn Ihre Ressourcen wie http://localhost:3001/books ohne locale erreichbar. Dies ist nützlich, wenn Sie das Standardgebietsschema verwenden möchten, wenn nicht angegeben ist.

Antwort

6

Die erste Zeile in Ihrem routes.rb ist eine allumfassende Strecke

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

Es sollte die letzte Zeile in der Datei direkt nach der Root-Route.

+0

Oh! Jetzt verstehe ich. Vielen Dank! Das funktioniert perfekt. – tinifni

4

Der andere Weg ist:

Possible_locales = /en|es/ 

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

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

Keine Notwendigkeit, über Wege, um sich Sorgen zu machen.

+0

Danke! Gut zu wissen, welche anderen Optionen ich beim Einrichten von Routen habe. – tinifni

1

Dieser Blogpost erklärt es eigentlich im Detail (Rails 4):

Genau das, was ich suchte, wenn nichts scheint

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 

Redirects arbeitet lang von der Wurzel auf dem Standard und macht noch viele andere Dinge.