0

我有一个 Rails 3.2.13 应用程序,我最初将路由过滤器 gem 用于 I18n。我计划在 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" do语句的范围内。如果我输入发现错误时应该出现的路线,则会显示正确的页面。例如,在开发中,如果我正确显示http://localhost:3000/fr/404http://localhost:3000/fr/500法语自定义错误页面显示正确。如果我有 /en 预期会显示英文自定义错误页面。

发生的情况是,当我收到错误时,会将语言环境分配给错误号。登陆页面不是显示正确的错误页面,而是显示在它尝试查找错误编号的翻译的地方,当然这些错误编号是不存在的。我不明白如何将语言环境设置为错误号。我认为我在 application_controller.rb 中的内容应该设置为 I18n.locale。我还尝试将 config/routes.rb 中的范围声明更改为下面的代码。两者都产生了相同的结果。

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

更新 2013 年 10 月 21 日上午 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 的帖子或示例,但到目前为止我还没有找到。

任何帮助,将不胜感激。

4

1 回答 1

0

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

于 2013-11-07T18:26:51.410 回答