rails cancan i18n异常消息

时间:2013-09-15 06:34:30

标签: ruby-on-rails internationalization cancan

我跟着this为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}."

然后我会得到

非autoriséà新产品

我想要的是

Non autorisé à nouveau produit.

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

由于

1 个答案:

答案 0 :(得分:3)

I18n支持模型和属性'名。

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

例:

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

如果直接设置flash消息,可以使用I18n.t功能并传递操作和主题参数。例:

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

也许您会想要为动作设置一些翻译。名称和使用t(参数[:action],范围:'动作')用于上面的flash消息或仅使用t(' actions.new')。

fr:
  actions:
    new: "nouveau"

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