Grails 类型与I18N标签而不是属性名称不匹配

Grails 类型与I18N标签而不是属性名称不匹配,grails,internationalization,grails-validation,Grails,Internationalization,Grails Validation,默认情况下,My message.properties包含以下内容: typeMismatch.java.lang.Double=属性{0}必须是有效数字 占位符{0}被属性名替换。我想使用用于前端的标签,如下所示: typeMismatch.java.lang.Double=属性{Wonder label here}必须是有效数字 我的第一次尝试: typeMismatch.java.lang.Double=Property {0} must be a valid number Book.n

默认情况下,My message.properties包含以下内容:

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

占位符{0}被属性名替换。我想使用用于前端的标签,如下所示:

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

我的第一次尝试:

typeMismatch.java.lang.Double=Property {0} must be a valid number
Book.number = Booknumber
typeMismatch.java.lang.Double=属性${message(代码:'0')}必须是有效数字

不工作,因为没有“0”消息。当时的文件还不清楚。 有人有这个主意吗

编辑:

typeMismatch.java.lang.Double=Property {0} must be a valid number
Book.number = Booknumber
我可以为每个属性编写一条错误消息,如下所示:

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


但这似乎是很多额外的工作…

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

我的错误是:

typeMismatch.java.lang.Double=Property {0} must be a valid number
Book.number = Booknumber
{0}已替换为属性名称

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

例如:

typeMismatch.java.lang.Double=Property {0} must be a valid number
Book.number = Booknumber
我的类名为Book,属性为number

在我的邮件属性中:

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

"Property number must be a valid number."
消息属性中的正确版本:

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

现在为我工作。:-)

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

package.ClassName.propertyName=Label
非常有用!再次感谢!
Al

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

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

因此,您需要同时使用
FQN/shortClassName.attributeName.label
FQN.attributeName
才能在两种验证中获得相同的可翻译的人性化名称


另一个提示,如果您收到不友好的错误消息,如“Property producer.employeeCount必须是有效数字”,请尝试将名为simply producer.employeeCount的属性添加到messages.properties文件中,以防对下一个人有所帮助,例如:

producer.employeeCount=员工人数

至少在Grails2.0.0中,这将产生一条更友好的消息:“Property Number of Employees必须是一个有效的数字。”

使用完全限定的类名(例如,com.example.domain.Client.employeeCount),在末尾加上或不加“.label”,对我来说都不起作用

希望这对某人有所帮助。

对于我来说,我需要这样做(即以“.label”结尾):com.my.pkg.MyDomainClass.title.label=自定义标题com.my.pkg.MyDomainClass.label=自定义域类标题