# config/routes.rb
scope "(:locale)", locale: /en|nl/ do
resources :books
end
使用此方法,在没有区域设置的情况下访问http://localhost:3001/books等资源时,您将无法获得
Routing Error
。当您想要在未指定默认语言环境时使用默认语言环境时,这非常有用。
我希望不正确/缺失区域设置重定向 ...不是路由错误!
例如,访问localhost:3000/asdf/books
时应重定向到localhost:3000/en/books
为什么?因为我继承了一个没有任何限制的应用程序,谷歌分析显示了一堆随机/无效区域设置的访问。我希望保持链接正常工作以改善互联网并将其转发到正确的URL。比显示404更好的用户体验。
答案 0 :(得分:2)
要重定向不正确的区域设置,请在范围后添加以下内容:
TZ=
要重定向缺少区域设置,请从以下位置更改范围:
moment(1399089600000).utcOffset()
为:
get '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
这样,语言环境不再是可选的。最后,重定向缺少语言环境的路径:
scope '(:locale)', locale: /en|nl/ do
最终结果:
scope ':locale', locale: /en|nl/ do
答案 1 :(得分:1)
您可以在应用程序控制器中捕获它。在你的路线:
scope "/:locale" do
resources :books
end
然后在app / controllers / application_controller.rb中:
before_action :set_locale
def set_locale
unless I18n.available_locales.map(&:to_s).include?(params[:locale])
redirect_to foo_url(locale: :en)
end
end