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.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
谢谢,亚当。它看起来像在工作。我只是不知道如何'redirect_to'上一页。我粘贴上面的控制器代码,也许你可以看看。 – Tintin81
redirect_to(request.referer),redirect_to(:back) – MiGro
你应该可以使用'redirect_to:back'。我建议使用'session'而不是传递'param'来跟踪当前的语言环境。就像你的'LocalesController'中的'session [:locale] = params [:set_locale]',然后在你的'PeopleController'中使用'session [:locale]'。 –