【问题标题】:Typemismatch with I18N Label instead of Attribute Name与 I18N 标签而不是属性名称的类型不匹配
【发布时间】:2010-11-26 06:46:39
【问题描述】:

我的 message.properties 默认包含这个:

typeMismatch.java.lang.Double=属性 {0} 必须是有效数字

占位符 {0} 被属性名称替换。我想像这样使用用于前端的标签:

typeMismatch.java.lang.Double=属性 {wonderful label here} 必须是有效数字。

我的第一次尝试:

typeMismatch.java.lang.Double=Property ${message(code:'0')} 必须是有效数字。

不工作,因为没有“0”消息。那时的文档还不清楚。 有人对这个有想法吗?

编辑:

我可以像这样为每个属性写一条错误消息:

typeMismatch.Book.booknumber = 属性 Booknumber 必须是有效数字。

但这似乎需要做很多额外的工作......

【问题讨论】:

    标签: grails internationalization grails-validation


    【解决方案1】:

    所以我犯了一个小错误......现在很容易......我会在这里回答。也许有人会遇到这个:

    我的错误是:

    typeMismatch.java.lang.Double=Property {0} must be a valid number
    

    {0} 已替换为属性名称。

    这背后的原因是 Grails API rendererror 正在寻找正确的类名和属性。

    例如:

    我的班级被命名为书,财产是数字。

    在我的消息属性中:

    book.number = Booknumber
    

    对于 i18n,一切正常,但当出现错误消息时,它会显示以下内容:

    "Property number must be a valid number."
    

    消息属性中的正确版本:

    Book.number = Booknumber
    

    现在为我工作。 :-)

    【讨论】:

    • 对我来说,我需要这样做(即以“.label”结尾):com.my.pkg.MyDomainClass.title.label=自定义标题 com.my.pkg.MyDomainClass.label=我的自定义域类标题
    【解决方案2】:

    太棒了!非常感谢你的帖子! 当它一开始对我不起作用时,我花了一些时间才意识到我需要在属性名前面使用完全限定的类名。所以语法是:

    package.ClassName.propertyName=Label
    

    非常有用!再次感谢! 铝

    【讨论】:

      【解决方案3】:

      Spring 的数据绑定错误验证器(“{0}”必须是有效数字)需要 fullClassName.fieldName 短类名和/或 .label 无法识别,请参阅 org.springframework.validation.DefaultBindingErrorProcessor#getArgumentsForBindError

      Grails 验证器(“{0} 必须是有效的电子邮件地址”)需要 FQClassName.fieldName.labelclassPropertyName.fieldName.label 添加.label 是必须的,从org.codehaus.groovy.grails.validation.AbstractConstraint#rejectValueWithDefaultMessage 可以看出

      因此,您需要 FQN/shortClassName.attributeName.label FQN.attributeName 在两个验证中获得相同的可翻译的人类友好名称。

      http://jira.grails.org/browse/GRAILS-8369

      【讨论】:

        【解决方案4】:

        另一个提示,以防它帮助下一个人,如果您收到不友好的错误消息,例如“Property producer.employeeCount must be a valid number”,请尝试将名为 producer.employeeCount 的属性添加到您的 messages.properties 文件中,因此:

        producer.employeeCount=员工人数

        至少在 Grails 2.0.0 中,这会产生更友好的消息:“员工的财产编号必须是有效数字。”

        使用完全限定的类名(例如 com.example.domain.Client.employeeCount),无论末尾有无“.label”对我都不起作用。

        希望这对某人有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-18
          • 2013-12-22
          • 2021-10-15
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 2013-03-22
          相关资源
          最近更新 更多