Ruby on rails 如何在RubyonRails中构建区域设置切换器?

Ruby on rails 如何在RubyonRails中构建区域设置切换器?,ruby-on-rails,ruby,ruby-on-rails-3,localization,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3,Localization,Ruby On Rails 3.2,我正在尝试在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.s

我正在尝试在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

如果您只想在人员索引页面上执行此操作,请尝试将
:method=>:get
添加到
表单标签中。如果您需要在整个应用程序的多个不同页面上支持区域设置,我将制作一个用于切换区域设置的新控制器(
LocalesController
),该控制器在会话中设置区域设置并重定向回上一页。这样您就可以在整个应用程序中检查它。

谢谢,亚当。看起来它在工作。我只是不知道如何将你重定向到上一页。我在上面粘贴了我的控制器代码,也许你可以看看。重定向到(request.referer),重定向到(:back)你应该可以使用
重定向到:back
。我建议使用
会话
而不是传递
参数
来跟踪当前区域设置。在
LocalesController
中使用类似于
session[:locale]=params[:set\u locale]
的东西,然后在
PeopleController
中使用
session[:locale]
。好的,我可以让它工作了!非常感谢你的帮助。
class LocalesController < ApplicationController

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

end