1

Guten Tag alle,Rails 4 Handhabung locale Fehlerseite

I Rails 4 und in meiner Website verwende ich die folgenden Links bin mit locale zu handhaben:

en - http://www.sample.com/XXXXX
zh- HK - http://www.sample.com/zh-HK/XXXXX
zh-CN - http://www.sample.com/zh-CN/XXXXX

Außerdem verwende ich die benutzerdefinierte Fehlerseite Methode 404, 4 zu handhaben 22 und 500 Fehler. dh

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' 

config/environment/production.rb

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

app/controller/application_controller.rb

class ApplicationController < ActionController::Base 
    before_filter :set_locale 

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

app/controller/errors_controller.rb

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 

**************** Hier ist mein Problem. ******************
Wenn ich tippe falscher Link in einem Muster wie http://www.sample.com/zh-HK/abc,
kann es mir die benutzerdefinierte Fehlerseite zeigen.

Wenn ich jedoch falsche Link wie z. http://www.sample.com/abc
(ohne Gebietsschema (eigentlich sollte es das Standardgebietsschema sein: en)),
Dies wird nicht auf meine benutzerdefinierte Fehlerseite gehen.
Stattdessen geben Sie mir eine Fehlerseite wie folgt aus: Not my custom error page

Wie kann ich dieses Problem beheben, so dass, wenn es Standardgebietsschema verwendet (das ist keine locale in Verbindung bedeuten), kann es die benutzerdefinierte Fehlerseite verwenden? Vielen Dank!

+0

Sie eine Antwort auf diese Frage gefunden? –

Antwort

0

Versuchen Sie, alle Ihre nicht-passenden Routen umleiten locale wie diese auf die Standard:

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