Rails 翻译在浏览器中的翻译字符串前面显示翻译名称

Rails translation displaying translation name in front of translation string in browser

在我的语言环境文件中,有如下翻译:

de:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              taken: "Die E-Mail Adresse wird bereits benutzt."

当我在浏览器中打开所需的页面时,错误消息如下所示:

Email Die E-Mail Adresse wird bereits benutzt.

那么有人知道为什么翻译后的字符串前面还有另一个"Email"吗?

正确的yml结构应该是:

de:
  activerecord:
    models:
      user: Dude
    attributes:
      user:
        email: "mail"
    errors:
      template:
        header:
          one:   "1 error prohibited this %{model} from being saved"
          other: "%{count} errors prohibited this %{model} from being saved"
      body: "There were problems with the following fields:"

  errors:
    format: ! '%{attribute} %{message}'
    messages:
      taken: "Email Die E-Mail Adresse wird bereits benutzt."

注意有两个"errors"键,一个在activerecord里面,一个在外面。使用后者作为验证消息。

您可以从 https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml

获得更完整详细的翻译文件

您可能会在 https://github.com/mcasimir/devise-i18n-views/blob/master/locales/en.yml

找到设计翻译文件

对于我的项目,我通常每种语言都有几个翻译文件:

  • rails.en.yml:rails 使用的消息(受 svenfuchs 文件启发)
  • devise.en.yml:与身份验证相关的消息(来自设计项目本身)
  • en.yml:我在不属于其他 gems 的视图上创建的消息(像 "simple_form" 这样的 gems 通常也有自己的文件)

编辑

Rails Internationalization guide 开始,将按以下顺序搜索验证消息:

  • activerecord.errors.models.user.attributes.name.blank
  • activerecord.errors.models.user.blank
  • activerecord.errors.messages.blank
  • errors.attributes.name.blank
  • errors.messages.blank

所以使用您在问题上发布的内容是正确的:

de:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              taken: "http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models"