Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: changing locale and keeping page parameters

I have a navbar with links to different languages:

<%= link_to t('header.english'), locale: "en" %>

The problem is when user tries to switch language on a page which contains additional parameters in the url. Changing locale at this point reloads the page and strips all the additional parameters.

So, how do I pass all the parameters from the current page to the locale switch link?

For example, when

/page/new?param1=1&param2=2

is open, and user switches the locale,

/page/new?locale=en

is opened, and both additional parameters are stripped away from the url.

like image 468
Alexander Savin Avatar asked Oct 04 '12 12:10

Alexander Savin


2 Answers

If you need locale param to stay in all requests it's good to use this approach:

# app/controllers/application_controller.rb
def default_url_options(options={})
  { locale: I18n.locale }
end

from rails guide

like image 77
Sergii Mostovyi Avatar answered Oct 07 '22 00:10

Sergii Mostovyi


EDIT: THIS IS NOT A GOOD WAY TO DO THIS. See comments below.

The problem is that you are not passing the current params to link_to when you create the locale switcher link.

Change your navbar link to:

<%= link_to t('header.english'), params.merge(locale: "en") %>

See also: Add querystring parameters to link_to

like image 39
Chris Salzberg Avatar answered Oct 07 '22 00:10

Chris Salzberg