2

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

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

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

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

我的第一次尝试:

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

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

编辑:

好吧,我可以为每个属性写一条错误消息,如下所示:

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

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

4

4 回答 4

2

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

我的错误是:

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

现在为我工作。:-)

于 2009-09-08T09:52:33.933 回答
1

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

package.ClassName.propertyName=Label

很有用!再次感谢!铝

于 2009-09-20T02:46:35.700 回答
0

Spring 的数据绑定错误验证器(“{0}”必须是有效数字)需要fullClassName.fieldName Short class name 和/或 .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

于 2011-11-24T18:36:44.013 回答
0

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

producer.employeeCount=员工人数

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

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

希望这可以帮助某人。

于 2013-09-17T23:24:03.180 回答