0

Railsでロケールスイッチャーを構築しようとしています。サポートする言語がたくさんあるので、その目的で選択ボックスを使用しようとしています。

# application.html.erb

<%= form_tag people_path, :class => 'locale' do %>
  <%= select_tag 'set_locale', options_for_select(LANGUAGES, I18n.locale.to_s), :onchange => 'this.form.submit()' %>
<% end %>


# application_controller.rb

before_filter :set_i18n_locale_from_params

def set_i18n_locale_from_params
  if params[:locale]
    if I18n.available_locales.include?(params[:locale].to_sym)
      I18n.locale = params[:locale] || "de"
    else
      flash.now[:notice] = "#{params[:locale]} translation not available"
      logger.error flash.now[:notice]
    end
  end
end

def default_url_options
  { :locale => I18n.locale }
end

問題は、選択ボックスから言語を選択すると、何らかの理由でcreate内部のアクションがトリガーされることです。people_controller.rb

form_tagサイト全体で機能するロケールスイッチャーを取得するには、どのようなアクションを実行する必要がありますか?

助けてくれてありがとう。

class LocalesController < ApplicationController

  def change_locale
    if params[:set_locale]
      redirect_to people_path(:locale => params[:set_locale])
    end
  end

end
4

1 に答える 1

1

Peopleインデックスページでのみ発生させたい場合は、に追加:method => :getしてみてくださいform_tag。アプリケーション全体で複数の異なるページでロケールをサポートする必要がある場合はLocalesController、セッションでロケールを設定して前のページにリダイレクトするロケール()を切り替えるための新しいコントローラーを作成します。そうすれば、アプリケーション全体で確認できます。

于 2013-02-03T16:11:10.723 に答える