始终在rails 4 app中的URL中显示区域设置

时间:2016-08-21 11:53:38

标签: ruby-on-rails locale rails-i18n

所以我使用的是i18n gem,因为我的rails web-app必须提供2种语言版本:FR和NL。

我将FR设为默认语言区域。

我的目标是确保在任何情况下,语言环境(即。/ fr /或/ nl /)始终显示在URL中。

locale = nl就是这种情况,但locale = fr不是默认语言环境的情况。

这是一个用户故事的例子:

  1. 用户到达网站并且必须选择他/她的语言:让我们说“FR”(“FR”是默认语言环境)
  2. 用户现在可以浏览网站
  3. 用户访问“新闻源”页面,他/她的网址为 http://localhost:3000/newsfeed
  4. 通过此示例,网址应为 http://localhost:3000/fr/newsfeed (网址中包含 / fr /

    这些是我的路线:

    Product.create(product_type_id: 1, name: "refactoring", price: 24.99, properties: ActionController::Parameters.new({author: "Martin Fowler", page_count: 197, paperback: 1 }) )
    

    在我的application.rb中我有

    scope '(:locale)', constraints: { locale: /nl|fr/ } do
    
      resources :articles, :path => 'newsfeed', only: [:index, :edit, :destroy, :update, :new, :create]
    
      root to: 'languages#select'
    
      get '*path' => redirect('/')
    end
    

    在欢迎页面中,用户必须选择他们的语言,我有这个

    config.i18n.default_locale = :fr
    config.i18n.available_locales = [:fr, :nl]
    

    总而言之,locale = nl的网址将始终显示 * http://localhost:3000/nl/newsfeed ,但对于默认区域设置 fr ,情况并非如此,我需要解决这个问题。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要覆盖url_for方法。

module ActionController::Base
  def url_for(options)
    options.merge! {:locale => "correct locale"}
    super
  end
end

此方法在其他Rails类中定义,也就像在视图和路由中一样。所以你需要覆盖所有这些。