为什么:locale不能使用绝对路径?

时间:2018-11-15 15:33:38

标签: ruby-on-rails ruby internationalization locale

我正在我的Rails应用程序中应用I18n,因此当路径不是相对路径时,URL会出现问题。绝对始终保留默认值,而相对路径则可以正常使用:

controllers / 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

config / application.rb

I18n.available_locales = [:en, :es]
    config.i18n.default_locale = :en

config / 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

我的问题是:当路径为绝对路径时是否可以更改区域设置?还是应该全部更改为relative_path?

0 个答案:

没有答案