如何防止 Rails locale=xx in URL(禁用)?

How to prevent Rails locale=xx in URL (disable)?

这是我的:

现在,挑战是避免(禁用)'identical content' URL 生成。例如:

http://www.bla-bla-bla.com/en/super-duper-post-1

http://www.bla-bla-bla.com/super-duper-post-1?locale=en

两者具有相同的内容(这对于 i18n 和路由逻辑来说是显而易见的)。

据我了解,这是由于 routes.rb 中“(:locale)”的作用域造成的。

所以我想完全禁用 ?locale URL 并坚持使用 /(:locale) 格式.. 唯一的默认语言环境完全符合我目前的需要,因为我没有使用 (:locale) 范围。

你可能想对我说这是在浪费时间,你不需要做任何事情,但事实并非如此。我很迂腐,真想把事情都说清楚。机器人索引相同的内容真的很烦人..请不要告诉我不允许在 robots.txt 中进行索引;-)

谢谢!

是的,这就是我在路线 (routes.rb) 中所拥有的:

  devise_for :users
  post '/feedbacks' => 'feedback#create'
  resources :careers
  resources :articles, :path => "blog"
  resources :tag

  scope '(:locale)', locale: /en|cs/ do
    root 'pages#home'
    resources :articles, :path => "blog"
    resources :tag
  end

这是我在语言环境配置中的内容 (application.rb):

    config.i18n.default_locale = :ru

我还有

 before_action :set_i18n_locale
  protect_from_forgery with: :exception

  protected


def set_i18n_locale
  if params[:locale]
    I18n.locale = params[:locale] || :ru
    @root = '/' + params[:locale]
  else 
    I18n.locale = I18n.default_locale
    @root = '/'
  end
end
def default_url_options(options = {})
  { :locale => ((I18n.locale == I18n.default_locale) ? nil : I18n.locale)  }
end

路由中所有属于范围的东西都使用en和cs语言环境,不在范围内的是默认的并且是ru语言环境。

我想所有的事情都设置得很直接。

我想禁用 ?locale= 行为并坚持使用 doman。com/locale/slug..