Ruby on rails 带有已翻译模型名的Rails i18n
在我的应用程序中,我想翻译验证错误行:“3个错误禁止保存此订单” 显然,可以将其设置为通用的,以适合使用此转换的所有模型,因此在我的de.yml区域设置模板中,我得到了如下activerecord.errors.template.header:Ruby on rails 带有已翻译模型名的Rails i18n,ruby-on-rails,ruby,internationalization,Ruby On Rails,Ruby,Internationalization,在我的应用程序中,我想翻译验证错误行:“3个错误禁止保存此订单” 显然,可以将其设置为通用的,以适合使用此转换的所有模型,因此在我的de.yml区域设置模板中,我得到了如下activerecord.errors.template.header: activerecord: errors: template: header: one: "Konnte %{model} nicht speichern: ein Fehler."
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调用中再次调用translate来解决此问题:
t('activerecord.errors.template.header', :count => @order.count, :model => t('activerecord.models.#{Order}'))
但这真的感觉像是一个非常糟糕的解决方案,我非常确定必须有一种内置的方法来做到这一点(因为通常有一种更干净的方法来处理Rails中的脏东西)
任何关于处理此类翻译的推荐方法的建议都将不胜感激。您是否尝试过以下方法,使用
:model=>Order.model\u name.human
而不是:model=>Order
t('activerecord.errors.template.header', :count => @order.count, :model => Order.model_name.human )
我仍然看不出这有什么问题…我想知道这里是否应该使用一个助手(否则我将自己编写)。。由于通常的嫌疑犯(表单助手等)都默认使用I18n,因此在本例中看起来非常丑陋..ActiveRecord::Base上没有方法human_name(在rails c中尝试过)抱歉,这是Order.model_name.human。我刚刚编辑了我的答案。