0

Rails 3.2.13 アプリケーションでは、もともと I18n 用に routing-filter gem を使用していました。Rails 4 で書き直す予定です。Rails 4 の製品版が利用できず、ベータ版を動作させることができなかったため、gem を削除しました。ほとんどのアプリケーションのルーティングを設定することに成功しました。私が抱えている唯一の問題は、カスタム エラー ページにあります。

routing-filter 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

これは、routing-filter gem を使用していたときのルート ファイルの内容です。

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

現在、これらのステートメントはスコープ "/:locale" doステートメント内にあります。エラーが見つかったときに表示されるルートを入力すると、正しいページが表示されます。たとえば、開発中の場合、フランス語のカスタム エラー ページが適切にhttp://localhost:3000/fr/404表示http://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

この質問に対する回答が得られなかったので、public フォルダーで I18n を使用してカスタム エラー ページを作成することにしました。この投稿を作成しましたRails 4 - I18n を使用してパブリック フォルダーでカスタム エラー ページを実行したい. 私の投稿でうまく機能する解決策と詳細を見つけることができました。

于 2013-11-07T18:26:51.410 に答える