2

Ruby on Railsアプリで、omniauthgemを使用して動作するようにOAuthを設定しました。すべてがスムーズに機能しています。ただし、アプリにI18nを追加すると、機能させるのに問題があります。具体的には、問題はコールバックにあります。I18nを使用してコールバックを正しく処理するようにroutes.rbコードを調整するにはどうすればよいですか?

ルート.rb

 scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
   resources :sessions, only: [:new, :create, :destroy]
   root to: 'static_pages#home'

   match 'auth/:provider/callback', to: 'sessions#create'
   match 'auth/failure', to: redirect('/')
   match 'signout', to: 'sessions#destroy', as: 'signout'

   match '/signin',  to: 'sessions#new'
   match '/signout', to: 'sessions#destroy', via: :delete
 end

  match '*path', to: redirect {|params| "/#{I18n.default_locale}/#{CGI::unescape(params[:path])}" }, constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" }
  match '', to: redirect("/#{I18n.default_locale}")

application_controller.rb

   before_filter :set_locale
     def set_locale
       I18n.locale = params[:locale] if params[:locale].present?
     end

     def default_url_options(options = {})
       {locale: I18n.locale}
     end
4

1 に答える 1

0

この質問への答えはここにあります。:localeは括弧で囲む必要があります:scope "(:locale)"

于 2012-08-15T14:17:08.253 に答える