我正在尝试在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
答案 0 :(得分:1)
如果您只想在人员索引页面上进行此操作,请尝试将:method => :get
添加到您的form_tag
。如果您需要在整个应用程序的多个不同页面上支持区域设置,我将创建一个新的控制器来切换区域设置(LocalesController
),该区域设置在会话中设置区域设置并重定向回上一页。这样你就可以在整个应用程序中查看它。