如何使用Ruby on Rails实现带有翻译型号名称的国际化(i18n)功能?

更新于
2026-10-09 21:56:29
1阅读来源:SEO问题
  • 内容介绍
  • 相关推荐

本文共计374个文字,预计阅读时间需要2分钟。

如何使用Ruby on Rails实现带有翻译型号名称的国际化(i18n)功能?

在我应用中,我想翻译验证错误信息:3个错误禁止保存此订单。显然,这可以通用,适用于所有需要使用此转换模式的场景。由于我在de.yml语言环境模板中,我得到了activerecord.errors.template。

在我的应用程序中,我想翻译验证错误行:“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)

如何使用Ruby on Rails实现带有翻译型号名称的国际化(i18n)功能?

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

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

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

关于如何处理这样的翻译的推荐方法的任何指示将不胜感激.

您是否尝试过以下方法,使用:model => Order.model_name.human而不是:model =>订购?

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

本文共计374个文字,预计阅读时间需要2分钟。

如何使用Ruby on Rails实现带有翻译型号名称的国际化(i18n)功能?

在我应用中,我想翻译验证错误信息:3个错误禁止保存此订单。显然,这可以通用,适用于所有需要使用此转换模式的场景。由于我在de.yml语言环境模板中,我得到了activerecord.errors.template。

在我的应用程序中,我想翻译验证错误行:“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)

如何使用Ruby on Rails实现带有翻译型号名称的国际化(i18n)功能?

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

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

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

关于如何处理这样的翻译的推荐方法的任何指示将不胜感激.

您是否尝试过以下方法,使用:model => Order.model_name.human而不是:model =>订购?

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