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

如果您只希望它发生在人物索引页面上,请尝试将其添加:method => :get到您的form_tag. 如果您需要在整个应用程序中支持多个不同页面上的区域设置,我将创建一个新控制器来切换区域设置 ( LocalesController),该控制器在会话中设置区域设置并重定向回上一页。这样您就可以在整个应用程序中检查它。

于 2013-02-03T16:11:10.723 回答