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
감사합니다. Adam. 작동하는 것처럼 보입니다. 나는 이전 페이지를'redirect_to '하는 법을 모른다. 위의 컨트롤러 코드를 붙여 넣었습니다. – Tintin81
redirect_to (request.referer), redirect_to (: back) – MiGro
당신은'redirect_to : back'을 사용할 수 있어야합니다. 나는 현재 로케일을 추적하기 위해'param'을 전달하는 대신'session'을 사용할 것을 제안합니다. 'LocalesController'에서'session [: locale] = params [: set_locale]'과 같은 것을 사용하고'PeopleController'에서'session [: locale]'을 사용하십시오. –