Я нахожусь в процессе применения I18n в моем приложении Rails, поэтому у меня проблема с URL, когда путь не относительный. Он всегда остается по умолчанию в абсолютных значениях, а при относительном пути работает нормально:
Контроллеры / application_controller.rb
class ApplicationController < ActionController::Base
before_action :set_locale
def set_locale
if cookies[:locale] && I18n.available_locales.include?(cookies[:locale].to_sym)
lang = cookies[:locale].to_sym
else
lang = I18n.default_locale
cookies.permanent[:locale] = lang
end
I18n.locale = lang
end
def default_url_options(options = {})
{locale: I18n.locale }
end
end
конфиг / application.rb
I18n.available_locales = [:en, :es]
config.i18n.default_locale = :en
конфиг / routes.rb
Rails.application.routes.draw do
scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
resources :posts, only: %i[index show]
end
get '*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '', to: redirect("/#{I18n.default_locale}/")
_header.html.erb
<ul>
<li class="<active' if current_page?(root_path) %>"><%= link_to t("header.home"), main_app.root_path %></li>
<li class="<%= 'active' if active_page('option1') %>"><%= link_to t("header.about_us"), option1_path %></li>
<ul class="mobilenav">
<li><%= link_to t("header.option2"), "/option2" %></li>
<li><%= link_to t("header.option3"), "/option3" %></li>
<li><%= link_to t("header.option4"), "/option4" %></li>
<li><%= link_to t("header.option5"), "/option5" %></li>
</ul>
</li>
</ul>
Следовательно, при переходе к корневому пути или пути option1 он работает при изменении локали, в то время как опции 2,3,4 и 5 всегда остаются в локали по умолчанию:
localhost:3000/en/option2
У меня вопрос: можно ли изменить локаль, когда путь абсолютен, или я должен изменить все на относительный_путь?