在Grails中本地化验证(错误)消息

时间:2011-01-12 15:50:18

标签: grails localization internationalization

我尝试本地化来自Domain类的错误消息。这可以使用默认错误消息,例如:

  

default.blank.message =属性[{0}]不能为空

和本地化的属性名称,例如:

  

customer.address.label =客户地址

“客户”是我的域类,地址是其属性。

我的问题是我无法本地化某些属性,因为我需要特定的错误消息。 例如:

  

has.to.be.a.number =属性[{0}]必须是数字

     

contingent.size.label =或有大小。

但我得到的信息是“Property [size]必须是一个数字”而不是“Property [Contingent size]必须是一个数字”。

我无法本地化的消息如下:

  • 属性[{0}]必须是数字
  • 属性[{0}]必须是有效日期//我不能在此上下文中使用g:datePicker

<小时/> 我在其他一些域类中添加了一些其他示例,但这些示例也不起作用

package cz.quanti.spaportal.touristOffice

import ...

class TouristOffice {  
    String customerNumber  
    int minimalContingent  
    Address address  
    User user  
    ContactPerson contactPerson  

    static hasMany = [contingents: Contingent]

    static constraints = {  
        customerNumber(unique:true, nullable: true, blank: true)  
        user(nullable: true, blank: true)  
        contactPerson(nullable: false)  
        minimalContingent(min: 0)  
        address(nullable: false)  
    }

只有“minimalContingent”未本地化:(邮件已本地化,而最小属性不是) 属性[minimalContingent]必须是一个数字。

3 个答案:

答案 0 :(得分:4)

如果验证消息有问题,您可以随时使用实例上的errors集合检查验证错误的代码。

Customer c = ...

c.validate()

c.errors.each { println it }
c.errors.getFieldError("address").codes.each { println it }
c.errors.getFieldError("address").defaultMessage

编写单元测试以检查代码以本地化消息。

答案 1 :(得分:2)

确保您在定义中使用域类包。还要检查你的大小写;我不确定它是否有所作为,但我使用标签的成功messages.properties看起来类似于以下内容:

// messages.properties
com.example.Customer.address.label=Customer address
com.example.Contingent.size.label=Contingent size

// or if you're using the default package
Customer.address.label=Customer address
...

<小时/> 更新后,你能澄清一下吗?您的messages.properties

中是否有以下内容?
cz.quanti.spaportal.touristOffice.TouristOffice.minimalContingent.label=...

如果没有,如果添加它会起作用吗?

答案 2 :(得分:1)

我认为属性的整个路径(最后没有“label”)应该对你有用。看起来像这样:

com.example.Customer.homeAddress=Customer address

请记住在需要的地方使用小写和大写!