2011-01-12 9 views
0

도메인 클래스의 오류 메시지를 현지화하려고합니다. 이것은 기본 오류 메시지, 예를 들면 가능합니다 :Grails에서 유효성 검사 (오류) 메시지 번역하기

default.blank.message는 = 속성은 [{0}] 비워 둘 수 없습니다

및 지역화 된 속성 이름, 예 :

customer.address.label = 고객 주소

여기서 "고객"은 내 도메인 클래스이고 주소는 해당 속성입니다.

내 문제는 특정 오류 메시지가 필요하기 때문에 일부 특성을 현지화 할 수 없다는 것입니다. 예컨대 :

has.to.be.a.number 속성 = [{0}] 다수

contingent.size.label = 우발 크기 조정되어야한다.

하지만 메시지는 "속성 [크기]는 숫자 여야합니다."대신 [속성 [조건부 크기]는 숫자 여야합니다. "입니다.

내가 지역화 어차피 메시지 ​​

은 다음과 같습니다

  • 속성은 [{0}] 숫자를 수있다
  • 속성은 [{0}] 유효한 날짜를이어야한다
  • // 난 못해 g 사용하는도 작동하지 않습니다


내가 다른 도메인 클래스와 다른 예를 추가 이러한 맥락에서 날짜 선택기를

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"만 지역화되지 않았습니다. (메시지가 현지화되어 있고 최소 속성이 아닙니다) [minimumContingent] 속성은 숫자 여야합니다.

+0

어떤 검사기를 사용하고 있습니까? 제약 조건이있는 도메인 클래스 코드를 추가하십시오. – mfloryan

+0

도메인 클래스가 패키지에 있거나 기본 패키지를 사용하고 있습니까? –

+0

또한 레이블을 작동 시키거나 사용자 정의 유효성 검사 메시지가 작동하는 데 문제가 있습니까? 나는 이전의 것을 가정했으나 질문을 다시 읽은 후에 어떤 문제에 관해서는 조금 더 모호 해졌다. –

답변

1

필자는 속성에 대한 전체 경로 (끝에 "label"이 없음)가 효과가 있다고 생각합니다. 다음과 같이 표시됩니다.

com.example.Customer.homeAddress=Customer address 

필요한 경우 소문자와 대문자를 사용해야합니다.

2

정의에서 도메인 클래스 패키지를 사용하고 있는지 확인하십시오. 대문자도 확인하십시오. 당신이 뭔가를 명확히 할 수

// 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=... 

, 작동합니까 : 당신은 당신의 messages.properties에 다음이 있나요?

+0

기본 패키지를 사용하고 있지 않습니다. 그러나 대부분의 기본 메시지는 다음 두 경우 모두에서 작동합니다. com.example.Customer.name.label = Name 및 customer.name.label = 이름 – John

4

유효성 검사 메시지에 문제가있는 경우 인스턴스의 errors 컬렉션을 사용하여 유효성 검사 오류 코드를 항상 확인할 수 있습니다.

Customer c = ... 

c.validate() 

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

코드를 검사하여 메시지를 현지화하려면 단위 테스트를 작성하십시오.

+0

글쎄이게 좋은 생각 인 것 같습니다. 그러나 이것은 일부 오류 (및 관련 코드) 만 인쇄합니다 (일부는 단위 테스트에서 2 (gsp)). 이러한 오류는 현지화되어 잘 작동합니다 (그러나 인쇄되지 않은 일부 오류는 잘 작동하고 일부 오류는 아닙니다). – John

관련 문제