我正在我的Rails应用程序中应用I18n,因此当路径不是相对路径时,URL会出现问题。绝对始终保留默认值,而相对路径则可以正常使用:
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
I18n.available_locales = [:en, :es]
config.i18n.default_locale = :en
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}/")
<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
我的问题是:当路径为绝对路径时是否可以更改区域设置?还是应该全部更改为relative_path?