In meiner Rails-Anwendung habe ich diese Methode, durch die ein Benutzer ihre locale ändern können:Wie behalten Sie URL-Parameter beim Ändern der Ländereinstellung bei?
# 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
Leider, wenn ein Benutzer ein anderes Gebietsschema, alle anderen Parameter, die vorhanden waren, i n der URL zu dieser Zeit sind verloren. Gibt es eine Möglichkeit, das zu umgehen?