1

グッドデイ皆、Railsの4ハンドリングロケールのエラーページ

私はRailsの4を使用していますし、私のウェブサイトで、私はロケールを処理するために、以下のリンクを使用しています:

エン - http://www.sample.com/XXXXX
zh- HK - http://www.sample.com/zh-HK/XXXXX
ZH-CN - また、私は404を処理するために、カスタムエラーページの方法を使用していますhttp://www.sample.com/zh-CN/XXXXX

、4 22と500のエラー。 すなわち

のconfig/routes.rbを

scope "(:locale)", :locale => /en|zh-CN|zh-HK/ do 
    root 'home#index' 
    get '/' => 'home#index', as: :home_page 
    get 'about' => 'home#about', as: :about_page 
end 

%w(404 422 500).each do |code| 
    get code, :to => "errors#show", :code => code 
end 

get '/:locale' => 'home#index' 

設定/環境/ production.rb

Rails.application.configure do 
    config.exceptions_app = self.routes 
end 

アプリ/コントローラ/ application_controller.rb

class ApplicationController < ActionController::Base 
    before_filter :set_locale 

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

アプリ/コントローラ/ errors_controller.rb

ここでは0
class ErrorsController < ApplicationController 

    def show 
    render status_code.to_s, :status => status_code, :layout => false 
    end 

protected 

    def status_code 
    params[:code] || 500 
    end 

end 

****************私の問題である。******************
私が入力したときhttp://www.sample.com/zh-HK/abc
のようなパターンで間違ったリンクを表示すると、カスタムエラーページが表示されます。

ただし、間違ったリンクを入力するとhttp://www.sample.com/abc
(実際にはデフォルトロケール:en))、
これは私のカスタムエラーページには行かないでしょう。
代わりに、それは私にこのようなエラーページ与える:それは(のリンクには、ロケールを意味しないこと)デフォルトロケールを使用している場合、それはカスタムエラーページを使用できるように、私はこの問題を解決するにはどうすればよい Not my custom error page

を?ありがとうございました!

+0

あなたがこれまでどんな答えを見つけますか? –

答えて

0

は次のようにロケールをデフォルトにすべてのあなたのないマッチングルートをリダイレクトしてみてください。

scope "(:locale)", :locale => /en|zh-CN|zh-HK/ do 
    root 'home#index' 
    get '/' => 'home#index', as: :home_page 
    get 'about' => 'home#about', as: :about_page 
end 

%w(404 422 500).each do |code| 
    get code, :to => "errors#show", :code => code 
end 

root to: redirect("/en", status: 302), as: :redirected_root 
get "/*path", 
    to: redirect("/en/%{path}", status: 302), 
    constraints: {path: /(?!(en|zh-CN|zh-HK)})\/).*/}, 
    format: false