0

레일스에서 ​​로케일 스위처를 만들려고합니다. 지원할 많은 언어가 있으므로 선택 상자를 사용하려고합니다.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.rb 내부 create 조치가 어떤 이유로 트리거됩니다 있다는 것입니다.

전체 사이트에서 작동하는 로케일 전환기를 얻으려면 form_tag에 어떤 조치를 취해야합니까?

도움 주셔서 감사합니다.

class LocalesController < ApplicationController 

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

end 

답변

1

만이 인민의 인덱스 페이지에서 발생 할 경우, form_tag:method => :get를 추가하려고합니다. 응용 프로그램에서 여러 페이지의 로켈을 지원해야하는 경우 세션에서 로켈을 설정하고 이전 페이지로 다시 리디렉션하는 로케일 (LocalesController)을 전환하기위한 새 컨트롤러를 만들 것입니다. 그렇게하면 응용 프로그램 전체에서 확인할 수 있습니다.

+0

감사합니다. Adam. 작동하는 것처럼 보입니다. 나는 이전 페이지를'redirect_to '하는 법을 모른다. 위의 컨트롤러 코드를 붙여 넣었습니다. – Tintin81

+0

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

+0

당신은'redirect_to : back'을 사용할 수 있어야합니다. 나는 현재 로케일을 추적하기 위해'param'을 전달하는 대신'session'을 사용할 것을 제안합니다. 'LocalesController'에서'session [: locale] = params [: set_locale]'과 같은 것을 사용하고'PeopleController'에서'session [: locale]'을 사용하십시오. –

관련 문제