如何防止 Rails locale=xx in URL(禁用)?
How to prevent Rails locale=xx in URL (disable)?
这是我的:
- Rails 4
- 启用了三个语言环境的 I18n。
- 这三个中的一个是默认的并且不在路由中使用范围(因此它完全符合我的要求)。
- default_url_options 已启用,我知道它以及它的具体作用..
现在,挑战是避免(禁用)'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..
这是我的:
- Rails 4
- 启用了三个语言环境的 I18n。
- 这三个中的一个是默认的并且不在路由中使用范围(因此它完全符合我的要求)。
- default_url_options 已启用,我知道它以及它的具体作用..
现在,挑战是避免(禁用)'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..