У меня есть поисковая форма на моей домашней странице (root_path), которая также возвращает результаты в root_path.Я делаю многоязычный сайт с использованием Ruby I18n и использую опцию параметров url, чтобы язык был задан примерно так: localhost /? Locale = en
По какой-то причине, при отправке формы поиска, ответне на выбранном языке (это на языке по умолчанию), а параметр locale теперь отсутствует в URL.Например, отправка с помощью localhost /? Locale = ja вернется с английской страницей и URL-адресом localhost / (другой поиск по параметрам, но без локали)
Все остальные части моего приложения правильно сохраняют параметр локали (например, link_to).Другие формы в моем заявлении также сохраняют его правильно при отправке
Есть только два различия, которые я вижу между этой формой и другими.
- Эта форма использует метод: get
- Эта форма находится в корневом каталоге_путей
Вот форма:
<%= form_with(url: root_path, local: true, method: :get) do |form| %>
(various fields)
<%= form.submit t(:submitsearch), name: nil %>
HTML-код, который генерируется:
<form action="/?locale=en" accept-charset="UTF-8" method="get">
<input type="submit" value="Search" data-disable-with="Search" />
application_controller
class ApplicationController < ActionController::Base
before_action :set_locale
def default_url_options
{ locale: I18n.locale }
end
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
end
Однако URL, которыйзапрашивается:
http://localhost:3000/?utf8=✓&(other parameters - no locale)
Вот пример из моего приложения, который ведет себя как ожидалось
<%= form_with model: @equipment_type, local: true do |form| %>
(various fields)
<%= form.submit %>
, который сгенерировал HTML
<form action="/equipment_types/2?locale=en" accept-charset="UTF-8" method="post">
<input type="submit" name="commit" value="Update Equipment type" data-disable-with="Update Equipment type" />
Мне в основном нужноФорма поиска, чтобы сохранить выбранный пользователем язык, но в данный момент он всегда возвращается к запасному (и параметр локали исчезает из URL).Кажется, что действие формы генерируется правильно (оно имеет параметр? Locale = en), но его нет в URL-адресе или ответе на запрос.
Кто-нибудь может подсказать, в чем может быть проблема?