Validação de formulários i18n: VRaptor 3.4 + Hibernate Validator 3.1GA

Olá,

Estou criando um pequeno sistema multilingua. Porém, quando vou validar meus bean usando o Hibernate Validator eu gero as mensagens apenas em inglês. Gostaria de saber como é possível validar por ele e traduzir as mensagens.

Sei que tem como validar pelo próprio VRaptor, mas a quantidade de código de validação que deve ser escrita é bem maior! Alguém tem alguma alternativa? Como vocês fazem?

Abraços.

Se possível, use o Hibernate Validator 4.0, junto com o Bean Validations (javax.validation)

assim, pra validar é só usar o bundle ValidationMessages.properties (e variações) para internacionalizar.

Baixei o Hibernate Validator 4. Copiei para a WEB-INF/lib:

validation-api-1.0.0.GA.jar
slf4j-api-1.6.1.jar (já tinha na verdade)
hibernate-validator-4.2.0.Final.jar

Não copiei o hibernate-validator-annotation-processor-4.2.0.Final.jar, pelo visto ele é opcional, certo?

Coloquei minhas annotations de validação e ele gera os erros automáticos bonitinho, alguns são até em português, outros não: p. ex. quando vc coloca uma letra num campo numerico ele responde “preco - ???is_not_a_valid_number???”

Não achei na documentação do Hibernate Validator como eu configuro essas mensages e coloco ela várias linguas. Vc sabe me dar mais detalhes?

vc criou o arquivo ValidationMessages.properties no classpath?

se sim, as chaves são geralmente o nome completo da anotação com um .message no final (se vc abrir o jar do hibernate validator, no pacote org.hibernate.validator existem arquivos de exemplo com as chaves)

algo assim:

javax.validation.constraints.NotNull.message = não pode ser nulo

pra colocar outras linguas é a regra do bundle do java, só chamar os arquivos de ValidationMessages_en.properties, ValidationMessages_es.properties, etc

Entendi, muito obrigado. Não tinha criado esse arquivo ainda.

Mas o exemplo que eu dei do campo Preço, não era uma anotação que eu fiz. É uma validação que o Hibernate já faz. Para checar se a pessoa escreveu um número… essas mensagens tem como eu alterar também?

sim, a chave é o nome completo da anotação que vc usou + .message no final.