我跟着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中的源代码。 第二个是附加一些翻译文本。 但是有什么本土方式吗?
由于
答案 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]。