私は、ユーザーが自分のロケールを変更することができ、それを通してこの方法があります。残念ながらロケールの変更時にURLパラメータを保持する方法は?私のRailsアプリケーションで
# locales_controller.rb
class LocalesController < ApplicationController
def change_locale
new_locale = params[:set_locale]
if new_locale
session[:locale] = new_locale
url_hash = Rails.application.routes.recognize_path URI(request.referer).path
url_hash[:locale] = new_locale
redirect_to url_hash
end
end
end
# routes.rb
MyApp::Application.routes.draw do
scope "(:locale)", locale: /#{DEFINED_LANGUAGES.join("|")}/ do
get 'change_locale', :to => 'locales#change_locale'
...
end
# application_controller.rb
class ApplicationController < ActionController::Base
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || session[:locale] || extract_locale_from_accept_language_header || I18n.default_locale
session[:locale] = I18n.locale
end
def extract_locale_from_accept_language_header
http_accept_language.compatible_language_from(DEFINED_LANGUAGES) # => e.g. 'de'
end
...
end
# application_helper.rb
def locale_switcher
form_tag url_for(:controller => 'locales', :action => 'change_locale'), :method => 'get', :id => 'locale_switcher' do
select_tag 'set_locale', options_for_select(LANGUAGES, I18n.locale.to_s)
end
end
、ユーザが選択を別のロケール、存在する他のすべてのパラメータnその時点のURLは失われます。それを回避する方法はありますか?