我有一个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/404
或http://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的帖子或示例,但到目前为止我还没有找到。
任何帮助都将不胜感激。
答案 0 :(得分:0)
由于我没有收到有关此问题的任何意见,我决定尝试在公共文件夹中使用I18n进行自定义错误页面。我创建了这篇文章Rails 4 - Would Like To Do Custom Error Pages in Public Folder Using I18n。我能够找到一个在我的帖子中运作良好且细节的解决方案。