Rails国际化(I18n):网址中的区域设置

时间:2012-05-18 12:10:49

标签: ruby-on-rails-3 internationalization

我是rails的新手(使用3.2.1),我正在关注rails guides上的i18n-guide。

我在这部分遇到了问题:

  

您可能希望网址如下所示:www.example.com/en/books   (加载英语语言环境)和www.example.com/nl/books(其中   加载荷兰语区域)。这是可以实现的   从上面“覆盖default_url_options”策略:你只需要   以这种方式使用path_prefix选项设置路由

但是当我使用<%= products_path%>在我的观点中,它返回: / products?locale = en 我希望它返回 / nl / products

当我在浏览器中输入网址(f.e.localhost:3000 / nl / products)时,页面会显示正确的区域设置。

我错过了什么?

应用程序控制器:

class ApplicationController < ActionController::Base
  before_filter :set_locale

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

  def default_url_options(options = {})
    { :locale => I18n.locale }
  end
end

路线:

  scope "/:locale" do
    resources :products
  end

  match '/:locale' => 'products#index'

rake routes:

    products GET    /products(.:format)                  products#index
             POST   /products(.:format)                  products#create
 new_product GET    /products/new(.:format)              products#new
edit_product GET    /products/:id/edit(.:format)         products#edit
     product GET    /products/:id(.:format)              products#show
             PUT    /products/:id(.:format)              products#update
             DELETE /products/:id(.:format)              products#destroy
             GET    /:locale/products(.:format)          products#index
             POST   /:locale/products(.:format)          products#create
             GET    /:locale/products/new(.:format)      products#new
             GET    /:locale/products/:id/edit(.:format) products#edit
             GET    /:locale/products/:id(.:format)      products#show
             PUT    /:locale/products/:id(.:format)      products#update
             DELETE /:locale/products/:id(.:format)      products#destroy
                    /:locale(.:format)                   products#index
        root        /                                    products#index

2 个答案:

答案 0 :(得分:1)

如何使用path_prefix选项

def default_url_options(options = {})
  { :path_prefix => I18n.locale }
end

答案 1 :(得分:0)

我最终使用rails-translate-routes gem

它给了我预期的结果+它可以翻译出很大盈余的路线。