Ruby on Rails 3.2.13 - 使用I18n获取自定义错误页面的错误

时间:2013-10-18 01:20:58

标签: ruby-on-rails ruby-on-rails-3 rails-routing custom-error-pages rails-i18n

我有一个Rails 3.2.13应用程序,我最初使用了I18n的路由过滤器gem。我计划在Rails 4中重写它。我删除了gem,因为没有可用的Rails 4生产版本​​,我无法使beta版本工作。我成功地为大多数应用程序设置了路由。我遇到的唯一问题是我的自定义错误页面。

我在使用路由过滤器gem时创建了自定义错误页面。我需要有关如何为自定义错误页面设置路由的帮助。

以下是我在config / application.rb

中的配置
config.exceptions_app = self.routes

以下是我在application_controller.rb

中的内容
  before_filter :set_locale

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

  private
    def set_locale
      I18n.locale = (params[:locale] if params[:locale].present?) || cookies[:locale] || 'en'
      cookies[:locale] = I18n.locale if cookies[:locale] != I18n.locale.to_s
    end

以下是我使用路由过滤器gem时在路径文件中的内容。

match "/404",                   to: 'errors#error_404'
match "/500",                   to: 'errors#error_500'

现在这些陈述属于范围" /:locale"做声明。如果我键入发现错误时应显示的路径,则会显示正确的页面。例如,在开发中,如果我显示http://localhost:3000/fr/404http://localhost:3000/fr/500,则会正确显示法语自定义错误页面。如果我/英语自定义错误页面显示预期。

当我收到错误时,会将区域设置分配给错误编号。不显示正确的错误页面,而是显示着陆页面,它试图找到当前不存在的错误号的翻译。我不明白如何将语言环境设置为错误号。我认为,我在application_controller.rb中的内容应该设置为I18n.locale。我也尝试将config / routes.rb中的scope语句更改为下面的代码。两者都产生了相同的结果。

scope "/:locale", defaults: { :locale => I18n.locale.to_s } do

scope "/:locale", defaults: { :locale => I18n.locale } do

当这个退出工作时,我将 respond_to 语句添加到errors_controller.rb。但是我仍然会遇到同样的错误。

  def error_404
    @page_title     = t(:error_title_404)
    respond_to do |format|
      format.html { render status: 404 }
      format.any  { render text: "#{t :error_title_404_alt}", status: 404 }
    end
  end

  def error_500
    @page_title     = t(:error_title_500)
    respond_to do |format|
      format.html { render status: 500 }
      format.any  { render text: "#{t :error_title_500_alt}", status: 500 }
    end
  end

更新10/21/2013上午10点CDT GMT-5

我还在范围声明和外部尝试了以下内容,但仍然得到相同的错误。我也使用了没有locale子句的match语句,但是得到了同样的错误。

match "/404",                           to: redirect('/:locale/error_404'), locale: I18n.locale
match "/500",                           to: redirect('/:locale/error_500'), locale: I18n.locale

如何在发生错误时设置区域设置?我一直在搜索人们使用自定义错误页面和I18n的帖子或示例,但到目前为止我还没有找到。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于我没有收到有关此问题的任何意见,我决定尝试在公共文件夹中使用I18n进行自定义错误页面。我创建了这篇文章Rails 4 - Would Like To Do Custom Error Pages in Public Folder Using I18n。我能够找到一个在我的帖子中运作良好且细节的解决方案。