2014-12-27 89 views
1

我有下面的代碼做Bean驗證:國際化的豆驗證消息

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
Validator validator = factory.getValidator(); 
Set<ConstraintViolation<MyObject>> validations = validator.validate(myObject); 
if (!CollectionUtils.isEmpty(violations)) { 
    for (ConstraintViolation<?> validateError : violations) { 

    } 
} 

有沒有什麼辦法讓從標準豆驗證資源文件的消息?

我使用以下(非標準的方式):

Messages.get(validateError.getMessageTemplate().substring(1, 
    validateError.getMessageTemplate().length() - 1),locale); 
+0

是[這](HTTP:/然後,您可以使用MessageInterpolator這需要一個明確的Locale實例的插值方法通過實際驗證默認郵件插入器(通過引導過程中配置#getDefaultMessageInterpolator()訪問) /docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-message-interpolation.html#section-message-interpolation)你想達到什麼目的? – toniedzwiedz 2014-12-27 20:26:23

+0

'默認情況下,JVM的默認語言環境(Locale#getDefault())將用於查找包中的消息'我想在不更改整個VM語言的情況下自定義語言! – 2014-12-28 16:45:54

回答

1

假設你要取決於某些外部條件(例如用戶環境)來改變插值區域設置,您可以指定自定義MessageInterpolator當引導Bean驗證時。你可以做到這一點通過XML和validation.xml或編程,像這樣:

ValidatorFactory validatorFactory = Validation.byDefaultProvider() 
     .configure() 
     .messageInterpolator(new MyMessageInterpolator()) 
     .buildValidatorFactory(); 
Validator validator = validatorFactory.getValidator(); 

MyMessageInterpolator可以再例如通過ThreadLocal檢索(用戶)區域設置。

public String interpolate(String messageTemplate, Context context, Locale locale)