Rails 4处理语言环境错误页面

时间:2016-04-26 16:19:37

标签: ruby-on-rails ruby-on-rails-4 error-handling locale rails-i18n

大家好日子,

我正在使用Rails 4,在我的网站中,我使用以下链接来处理区域设置:

  

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

此外,我使用自定义错误页面方法来处理404,422和500错误。 即。

配置/ 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

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

如何解决这个问题,以便在使用默认语言环境时(这意味着链接中没有语言环境),它可以使用自定义错误页面?谢谢!

1 个答案:

答案 0 :(得分:1)

尝试将所有不匹配的路由重定向到默认语言环境,如下所示:

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