当前位置: 首页 > 知识库问答 >
问题:

如何在Rails 3.1中对失败的验证进行国际化(I18n)通用错误消息?

冯皓
2023-03-14

我希望能够提供国际化的、有用的错误消息。

对于嵌套表单提交,我有一条通用错误消息“部分视图呈现”

    # _error_messages.html.erb - Fragment
    ...

    <strong><%= t('errors.template.body') %> </strong>       
    <ul>
      <% object.errors.full_messages.each do |msg| %>
        <li><%= msg %> </li>
      <% end %>
    </ul>

    ...

我得到了国际化的body消息,但是,我不知道如何替换该属性,或者更具体地说,该模型字段的“:blank”错误(即,验证_presence_of:name)验证,尽管有许多yaml迭代

这是我的yaml的一个片段

en:
  errors: &errors
    format: ! '%{attribute} -- %{message}'
      messages:
        accepted: must be accepted
        blank: must not be blank
        body: ! 'There were problems with the following fields:'


    activemodel:
        attributes:
          family_wizard: 
            children: kids

我这样写yaml是因为当我检查传递给partial的错误对象时,当我将孩子的名字字段留空(:validates_presence_of:name)时,看起来如下所示:

#<ActiveModel::Errors:0x007111111C111111 @base=#<FamilyWizard id: nil, ...>, 
    @messages {:children=>["must not be blank"]}>

但我能得到的唯一错误信息是:

以下字段存在问题:

  • 孩子们--不能是空白的

理想的解决方案错误消息如下所示:

以下字段存在问题:

  • 孩子们--名字不能是空白的

这个堆栈溢出问题(如何本地化Rails 3.2.3中的通用错误消息部分?)是在正确的轨道上,但是它缺少我想要的激活模式/活动记录验证部分。

共有1个答案

王涵育
2023-03-14

这个问题的答案是我有错误的范围,因为我的yaml文件有两个问题。错误的间距和错误的标签。它应该是activerecord而不是activemodel,并且activerecord范围应该与树中的错误范围处于同一级别。

要翻译模型的属性(例如,孩子到孩子),yaml看起来像这样:

en:
  errors: &errors
    format: ! '%{attribute} -- %{message}'
      messages:
        accepted: must be accepted
        blank: must not be blank
        body: ! 'There were problems with the following fields:'


  activerecord:
    attributes:
      family_wizard: 
        children: kids

帮助我得到答案的两个资源是:

  • 如何翻译错误消息中的表单字段名称?
  • 最小I18n与Rails 3.2
 类似资料:
  • Mpx 支持国际化 i18n,使用方式及支持能力与 vue-i18n 非常接近。 使用方法 Mpx 自带 i18n 能力,无需额外安装插件。由于小程序模板中的 i18n 函数是通过 wxs 编译注入进行实现,我们需要将 i18n 配置传入到 MpxWebpackPlugin 中来使 i18n 生效,这是与 vue-i18n 最大的区别。 配置方法 I18n 配置传入到 MpxWebpackPlug

  • 暂时只支持配合vux-loader使用。 如果你只需要默认的中文组件,那么你可以略过下面说明,只要启用vux-ui插件即可。 默认不配置此插件时,vux源码会按照默认语言zh-CN进行静态编译,和原来的使用没有明显不同。 详细请参照 vux-loader的vux-i18n文档

  • 若要让您的网站以不同语言呈现,您可使用国际化(internationalization)功能。请先在 _config.yml 中调整 language 设定,这代表的是预设语言,您也可设定多个语言来调整预设语言的顺位。 language: zh-tw language: - zh-tw - en 语言文件 语言文件可以使用 YAML 或 JSON 编写,并放在主题文件夹中的 languages 文

  • 我正在一个Spring MVC项目中使用Hibernate Validator来验证表单中的输入字段。由于我的项目是基于Maven的,所以我添加了这个依赖项: 表单验证过程运行良好,但现在,我想重写或国际化默认错误消息。 例如,默认情况下,使用@notempty注释将产生消息“maynot be empty”。我怎样才能用我自己的消息代替这个消息?我试过几种解决方案: null 有什么提示吗?Th

  • 主要内容:时区转换,可用时区UTC代表协调世界时。 这是时间标准,并在全世界普遍使用。 所有时区的计算都与UTC的时差相当。 例如,丹麦哥本哈根的时间是表示UTC时间加上一个小时。用于在数据库中存储日期和时间。 时区转换 以下示例将展示各种时区的转换。 我们将以毫秒为单位打印一天中的小时和时间。 第一次将会有所不同,第二次将保持不变。 文件:IOTester.java - 执行上面示例代码,得到以下结果 - 可用时区 以下示

  • 我已在我的安全组中添加ICMP Echo Reply的入站规则。但是,我想想象一下在ec2实例上从SecurityGroup添加和删除此规则的效果。我怎么会认为那件事会产生影响? 我最初将“回音请求”和“回音回复”添加到我的安全组,以允许来自以下位置的ping: 但是,后来当我从我的安全组中删除“回声回复”时,它并没有对我上面列出的ping命令的行为产生任何影响。 如果添加ICMP“Echo Re