3

我已按照为 cancan 编写异常处理。首先,我在“新”操作中有一个产品模型这是英语语言环境文件:

# in config/locales/en.yml
en:
  unauthorized:
    manage:
      all: "Not authorized to %{action} %{subject}."

预期的结果很好:

Not authorized to new Product.

但我的问题是现在我有另一个语言环境前:.de

# in config/locales/en.yml
de:
  unauthorized:
    manage:
      all: "Non autorisé à %{action} %{subject}."

然后我会得到

Non autorisé à 新产品

我想要的是

Non autorisé à nouveau produit.

暂时我有 2 个选项来实现这一点,一个是我想我可以在 cancan 中修改源代码。第二个是附加一些翻译文本。但是有什么本土的方式吗?

谢谢

4

1 回答 1

3

I18n 支持模型和属性的名称。

在这种情况下,模型名称一旦在翻译文件中指定,就可以自动翻译。

前任。:

fr:
  activerecord:
    models:
      product: "produit"
    attributes:
      product:
        name: "nom"
        manufacturer: "fabricant"

在直接设置闪信的情况下,可以使用I18n.t函数,传递action和subject参数。前任。:

flash.now[:error] = t('unauthorized', scope: 'manage.all', action: params[:action], subject: Product.model_name.human)
render 'new'

也许您会想要为动作名称设置一些翻译,并使用 t(params[:action], scope: 'actions') 作为上面的 flash 消息,或者简单地使用 t('actions.new')。

fr:
  actions:
    new: "nouveau"

OBS:您可以使用 action_name (Rails 4) 或 controller.action_name (Rails 3) 而不是 params[:action]。

于 2014-03-20T06:49:55.423 回答