If you want to access i18n resources bundles for different locales in your Spring application, then that a class must implement MessageSourceAware interface. After implementing MessageSourceAware interface, spring context will automatically inject the MessageSource bean’s reference into the class via ‘setMessageSource(MessageSource messageSource)‘ setter method which your class needs to implement.
In simple words, MessageSourceAware interface provides a way for Spring beans to access and use the MessageSource for message resolution.
1. Accessing MessageSource in Spring
As mentioned, we need to implement the MessageSourceAware in a bean class.
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
@Controller
public class EmployeeController implements MessageSourceAware {
private MessageSource messageSource;
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
public void readLocaleSpecificMessage() {
String englishMessage = messageSource.getMessage("first.name", null, Locale.US);
System.out.println("First name label in English : " + englishMessage);
String chineseMessage = messageSource.getMessage("first.name", null, Locale.SIMPLIFIED_CHINESE);
System.out.println("First name label in Chinese : " + chineseMessage);
}
}
2. Message Resources
Note that there are two properties files in “/resources” folder in the web application. (Files should be in classpath in runtime).
first.name=First Name
first.name= 名 Míng
3. Demo
Now test if we can load locale-specific properties.
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.howtodoinjava.demo.controller.EmployeeController;
public class TestSpringContext {
@SuppressWarnings("resource")
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "/spring-servlet.xml" });
EmployeeController controller = (EmployeeController) context.getBean(EmployeeController.class);
controller.readLocaleSpecificMessage();
}
}
The program output:
First name label in English : First Name
First name label in Chinese : 名 Míng
Clearly, we can access resources in locale specific manner inside java bean.
Happy Learning !!
Comments