2011-07-15 82 views
0

是否有可能在grails中的其他國際化消息中包含i18n屬性值?grails i18n標籤交叉引用?

我有一個包含2個屬性「minDelay」和「maxDelay」的域類,我想寫一個引用標籤的國際化消息給兩者。

我寫了一個自定義的驗證(MAXDELAY必須大於或等於minDelay):

maxDelay(validator:{ 
    value, reference -> 
    if (value < reference.minDelay) { 
     return ['custom.error', it] 
    } else { 
     return true; 
    } 
    }) 

失敗時,我打印物業stub.maxDelay.custom.error

在我messages.properties有屬性:

stub.maxDelay.custom.error=Property [{0}] must be bigger than value of minDelay 
stub.minDelay.label=Min. delay (ms) 
stub.maxDelay.label=Max. delay (ms) 

我如何使用stub.minDelay.label屬性,而不是靜態文本的價值? 錯誤消息應該象:

"Property [Max. delay (ms)] must be bigger than value of [Min. delay (ms)]" 

我已經試過引用它像{stub.minDelay.label}${stub.minDelay.label}但我得到的是從Grails的解析錯誤。

也許我以錯誤的方式來解決這個問題,是否可以通過驗證器中的數字參數注入標籤?像例如,如果錯誤信息是:

stub.maxDelay.custom.error=Property [{0}] must be bigger than value of [{1}] 

回答

0

注意,還有第三個參數,org.springframework.validation.Errors類的,可以用來微調您的錯誤信息,如:

maxDelay(validator:{ value, reference, errors -> 
    if (value < reference.minDelay) { 
     errors.rejectValue('maxDelay', 'stub.maxDelay.custom.error', [value, obj.minDelay], 'oops') 
    } 
    }) 

它將工作的消息:

stub.maxDelay.custom.error=Property [{0}] must be bigger than value of [{1}] 
stub.maxDelay.custom.error=Property [{0}] must be bigger than value of [{1}] 
+0

沒有運氣,我試過你的建議,它會呈現對象的屬性值,而不是標籤名稱。例如'Property [10]必須大於[5000]' –

+0

的值,你只需要它是一個'Property [Max。延遲(毫秒)]必須大於[最小值]。延遲(毫秒)]「',沒有值?那麼你爲什麼不直接寫它? –

+0

我試圖將minDelay屬性標籤與其他任何引用它的消息分開。國際消息必須包含其他消息。 –