Rails optional /:locale route

2020-03-03 05:36发布

问题:

I'm trying to setup a routing system for my rails app that allows for an optional route (/:locale) to be allowed to the base of the website.

So more or less:

/en/home/ would goto the same page as /home/ /en/people/ -> /people/

The only issue I'm having is setting this up in the routes config.

回答1:

Use scope '(:locale)' do...end. You can see an example from Agile Web Development with Rails here:

http://intertwingly.net/projects/AWDwR4/checkdepot-30/section-15.1.html



回答2:

What I usually do is, in config/routes.rb:

MyApp::Application.routes.draw do

  scope "(:locale)", :locale => /en|fr/ do
    #here only two languages are accepted: english and french

  end
end

And in my ApplicationController:

before_filter :set_locale

def set_locale
  I18n.locale = params[:locale] || "en"
end