Added an example and explaination for using an optional path scope for the locale

This commit is contained in:
Luke Brown
2010-08-17 09:48:12 +01:00
parent 9a665aa6d2
commit 95ecc08a30

View File

@@ -231,6 +231,17 @@ end
Now, when you call the +books_path+ method you should get +"/en/books"+ (for the default locale). An URL like +http://localhost:3001/nl/books+ should load the Netherlands locale, then, and following calls to +books_path+ should return +"/nl/books"+ (because the locale changed).
If you don't want to force the use of a locale in your routes you can use an optional path scope (donated by the use brackets) like so:
<ruby>
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
</ruby>
With this approach you will not get a +Routing Error+ when accessing your resources such as +http://localhost:3001/books+ without a locale. This is useful for when you want to use the default locale when one is not specified.
Of course, you need to take special care of the root URL (usually "homepage" or "dashboard") of your application. An URL like +http://localhost:3001/nl+ will not work automatically, because the +root :to => "books#index"+ declaration in your +routes.rb+ doesn't take locale into account. (And rightly so: there's only one "root" URL.)
You would probably need to map URLs like these: