3

我最近在 I18n 上关注 Ryan Bate 的 Railscast添加多个位置并从 URL 参数设置语言环境,例如

www.example.com/en/
www.example.com/fr/

通常它是一种享受,但是我注意到,如果我手动尝试从 url 中删除位置,则生成的重定向不会正确形成,似乎将 / 编码为 %2F。例如,如果我从

www.example.com/fr/animals/horses
所以它是 www.example.com/animals/horses

然后重定向产生以下网址:
www.example.com/fr/animals%2Fhorses

这是我的路线的一部分.rb

scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
 resources animals
end

match '*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" }
match '', to: redirect("/#{I18n.default_locale}")

我试图找出一种将 CGI::escape 放入 {path} 的方法,但到目前为止我尝试过的任何方法都没有奏效。有谁知道解决此问题的正确代码?

导轨 3.2.6 / Ruby 1.9.2

谢谢

4

1 回答 1

9

我想你需要做的是使用一个块:

match '*path', to: redirect {|params| "/bla/#{CGI::unescape(params[:path])}" }

查看指南以获取更多信息http://guides.rubyonrails.org/routing.html#redirection

于 2012-07-10T18:06:44.450 回答