You can Internationalize the validation error messages using Resource Bundles.
Suppose if you want all the French locale messages, create a file 'ValidationMessages_fr_CA.properties' and keep all the messages in french locale here. Whenever a message specific to the locale is not found, then library takes the message from 'ValidationMessages.properties' file.
How to specify locale while calling the application?
Using the VM arguments 'user.country' and 'user.language', you can specify the locale that is used by the application.
Example
-Duser.country=CA -Duser.language=fr
Find the below steps to develop complete working application.
Step 1: Create properties file under src/main/resources folder.
validationMessages.properties
javax.validation.constraints.Size.message = User Name '${validatedValue}' is not upto the requirement. Name must have atleast {min} characters
validationMessages_fr_CA.properties
javax.validation.constraints.Size.message = Le nom d'utilisateur '$ {validatedValue}' n'est pas conforme à l'exigence. Le nom doit comporter au moins {min} caractères
Step 2: Define Employee.java
Employee.java
package com.sample.app.model;
import javax.validation.constraints.Size;
public class Employee {
private int id;
@Size(min=5)
private String name;
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Step 3: Define App.java
App.java
package com.sample.app;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import com.sample.app.model.Employee;
public class App {
private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
private static Validator validator = validatorFactory.getValidator();
private static void validateBean(Employee emp) {
System.out.println("************************************");
Set<ConstraintViolation<Employee>> validationErrors = validator.validate(emp);
if (validationErrors.size() == 0) {
System.out.println("No validation errors....");
}
for (ConstraintViolation<Employee> violation : validationErrors) {
System.out.println(violation.getPropertyPath() + "," + violation.getMessage());
}
System.out.println("");
}
public static void main(String args[]) {
Employee emp1 = new Employee(1, "Ram");
System.out.println("Validation Errors for emp1");
validateBean(emp1);
Employee emp2 = new Employee(2, "RamaKrishna");
System.out.println("Validation Errors for emp2");
validateBean(emp2);
}
}
Run App.java, by specifying the VM arguments (-Duser.country=CA -Duser.language=fr) for French Locale.
How to set the VM arguments in Eclipse?
Right click on App.java -> Run As -> Run Configurations…
Go to Arguments tab. Under VM arguments section add following VM arguments.
-Duser.country=CA -Duser.language=fr
Apply the changes.
Click on Run button. You will see the messages in french like below.
Validation Errors for emp1
************************************
name,Le nom d'utilisateur '$ {validatedValue}' n'est pas conforme à l'exigence. Le nom doit comporter au moins 5 caractères
Validation Errors for emp2
************************************
No validation errors....
No comments:
Post a Comment