私は(3.2.1を使用して)Railsを初めて使用し、Railsガイドのi18nガイドに従っていました。
このセクションで問題が発生しています:
おそらく、URLを次のようにしたいと思うでしょう:www.example.com/en/books(英語のロケールをロードします)とwww.example.com/nl/books(オランダのロケールをロードします)。これは、上記の「default_url_optionsのオーバーライド」戦略で実現できます。この方法でpath_prefixオプションを使用してルートを設定する必要があります。
しかし、ビューで<%= products_path%>を使用すると、/ products?locale = enが返され、 / nl/products を返します。
ブラウザ(fe localhost:3000 / nl / products)にURLを入力すると、ページに正しいロケールが表示されます。
私は何が欠けていますか?
アプリケーションコントローラー:
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options = {})
{ :locale => I18n.locale }
end
end
ルート:
scope "/:locale" do
resources :products
end
match '/:locale' => 'products#index'
レーキルート:
products GET /products(.:format) products#index
POST /products(.:format) products#create
new_product GET /products/new(.:format) products#new
edit_product GET /products/:id/edit(.:format) products#edit
product GET /products/:id(.:format) products#show
PUT /products/:id(.:format) products#update
DELETE /products/:id(.:format) products#destroy
GET /:locale/products(.:format) products#index
POST /:locale/products(.:format) products#create
GET /:locale/products/new(.:format) products#new
GET /:locale/products/:id/edit(.:format) products#edit
GET /:locale/products/:id(.:format) products#show
PUT /:locale/products/:id(.:format) products#update
DELETE /:locale/products/:id(.:format) products#destroy
/:locale(.:format) products#index
root / products#index