Typemismatch与I18N标签而不是属性名称

时间:2009-09-07 16:31:40

标签: grails internationalization grails-validation

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

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

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

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

我的第一次尝试:

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

无法正常工作,因为没有“0”消息。文档目前尚不清楚。 有人知道这个吗?

修改

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

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

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

4 个答案:

答案 0 :(得分: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

现在为我工作。 : - )

答案 1 :(得分:1)

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

package.ClassName.propertyName=Label

非常实用!再次感谢! 人

答案 2 :(得分:0)

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

答案 3 :(得分:0)

另一个提示,如果它有助于下一个人,如果你收到一个不友好的错误消息,如“Property producer.employeeCount必须是一个有效的数字”,请尝试将名为producer.employeeCount的属性添加到messages.properties文件中,就是这样:

producer.employeeCount =员工人数

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

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

希望这有助于某人。