Rails i18n与翻译的模型名称

时间:2012-02-01 10:03:50

标签: ruby-on-rails ruby internationalization

在我的应用程序中,我想翻译验证错误行:“3个错误禁止保存此订单”。

显然,这可以通用,以适应所有使用此翻译的模型,因此在我的de.yml语言环境模板中,我得到了像这样的activerecord.errors.template.header:

  activerecord:
    errors:
      template:
        header:
          one:    "Konnte %{model} nicht speichern: ein Fehler."
          other:  "Konnte %{model} nicht speichern: %{count} Fehler."

现在的问题是如何在不重复自我的情况下调用此验证。显然你可以通过以下方式调用它:

t('activerecord.errors.template.header', :count => @order.count, :model => Order)

但这不会翻译订单(订单在德语中称为Bestellung)

我可以继续通过在翻译调用中再次调用translate来解决这个问题:

t('activerecord.errors.template.header', :count => @order.count, :model => t('activerecord.models.#{Order}'))

但这确实是一个非常糟糕的解决方案,而且我很确定必须有一种内置的方法来实现这一点(因为通常有一种更简洁的方法来在Rails中执行脏东西)。

任何关于处理这类翻译的推荐方法的指示都将受到赞赏。

1 个答案:

答案 0 :(得分:7)

您是否尝试使用:model => Order.model_name.human代替:model => Order

进行了以下操作
t('activerecord.errors.template.header', :count => @order.count, :model => Order.model_name.human )