在Rails路由中转换slugs的最佳方法是什么?

dgi*_*rez 5 translation routes internationalization ruby-on-rails-3

我正在尝试在Rails3.1应用程序中实现我的路由的完全国际化.我已经在使用Francesc Pla的rails-translate-routes来本地化路由动作和资源.最后一步是能够为我的一些模型转换slu ..

要翻译的路线:

http://myhost.com/products/pharmacy --> http://myhost.com/productos/farmacia
Run Code Online (Sandbox Code Playgroud)

我有一个表格的嵌套路线

# routes.rb
match 'products/:category_slug' => "products#index"
Run Code Online (Sandbox Code Playgroud)

我有一个带有实例的模型类别,#<Category id: 1, slug: "pharmacy">find_by_slug在ProductsController中做类别.

有关如何翻译的任何想法都可以翻译:category_slug路线的一部分吗?

小智 0

据我所知,只要您使用正确的命名空间,您就可以直接从控制器调用翻译助手I18n

所以你的 ProductsController 可能包含如下内容:

class ProductsController < ApplicationController
  def index
    i18n_slug = I18n.t("locale.category.#{params[:category_slug]}")
    @category = Category.find_by_slug(i18n_slug)
  end
end
Run Code Online (Sandbox Code Playgroud)

您可能应该告知自己将参数直接传递到翻译引擎的潜在安全风险,尽管我不知道有任何风险。如果它将在多个控制器操作中使用,您还可以考虑将其移至 before 过滤器或应用程序控制器中。