Rails:表单对象在 activemodel 上找不到 I18n(命名空间问题)

Rails: Form Object not finding I18n on activemodel (namespacing issue)

我有一个表单对象 (rails 3),我正在尝试将 config/locales/en.yml 用于错误消息。

我的表单对象如下所示:

class Users::PasswordAndLoginUpdatingForm
  include Virtus.model

  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations

  attribute :requested_email_address, String
  validates :requested_email_address, allow_blank: true, format: { with: User::VALID_EMAIL_REGEX }

在我的表格中,我有通常的

form_for @form_object ... do |f|

如果我在 pry 中找出 f.object_name 是什么,我会得到 users_password_and_login_updating_form

最后,我的 config/locales/en.yml 看起来像这样:

en:
  activemodel:
    errors:
      models:
        users_password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "bar"

我遇到的问题是,我无法让它使用国际化。

在你的config/locales/en.yml文件中应该是activerecord:而不是activemodel:吗?

好吧,我通过深入研究源代码找到了答案。我遇到的问题是我的 form objectUsers::PasswordAndLoginUpdatingForm 命名空间中。

诀窍 使用 activemodel: 作为您的命名空间,但是,如果您的模型中有更多的命名空间,它们将用 / 分隔s.

因此,正确的 yml 如下所示:

en:
  activemodel:
    errors:
      models:
        users/password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "foo"