0

我想在Rails中构建一个语言环境切换器。我有大量的语言支持,所以我正在尝试使用一个选择框来达到这个目的。现在如何在Ruby on 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 

的问题是,当我从选择框中选择一种语言,我people_controller.rbcreate行动被触发的某些原因。

为了得到可在整个站点工作的区域设置切换器,我需要在form_tag中采取什么操作?

感谢您的任何帮助。

class LocalesController < ApplicationController 

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

end 

回答

1

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

+0

谢谢,亚当。它看起来像在工作。我只是不知道如何'redirect_to'上一页。我粘贴上面的控制器代码,也许你可以看看。 – Tintin81

+0

redirect_to(request.referer),redirect_to(:back) – MiGro

+0

你应该可以使用'redirect_to:back'。我建议使用'session'而不是传递'param'来跟踪当前的语言环境。就像你的'LocalesController'中的'session [:locale] = params [:set_locale]',然后在你的'PeopleController'中使用'session [:locale]'。 –