【问题标题】:How to prevent Rails locale=xx in URL (disable)?如何防止 URL 中的 Rails locale=xx(禁用)?
【发布时间】:2015-02-22 23:27:51
【问题描述】:

这就是我所拥有的:

  • 导轨 4
  • 启用了三种语言环境的 I18n。
  • 这三个中的一个是默认的,并且不在路由中使用范围(因此它完全符合我的要求)。
  • default_url_options 已启用,我知道它以及它到底做了什么..

现在,挑战是避免(禁用)“相同内容”的 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中的相关代码?

标签: ruby-on-rails routes internationalization


【解决方案1】:

是的,这就是我在路线 (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..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多