This post describes how to implement message internationalization in Spring. The code example is available from GitHub in the Spring-MVC-Internationalization directory. It is based on the Spring MVC with annotations example.Internationalization
We define two resource bundles (setA and setB) containing string translations for German, French and English. These are created in the src/main/resources maven directory.Configuration
We need to create:- a ResourceBundleMessageSource bean to load the string translations
- a LocaleChangeInterceptor bean which will intercept requests and extract a parameter value (if available) to detect language changes
- a SessionLocaleResolver bean to store the user's locale preference in the session
- to register the LocaleChangeInterceptor in the interceptor registry
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "com.jverstry")
public class WebConfig extends WebMvcConfigurerAdapter {
...
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource result
= new ResourceBundleMessageSource();
String[] basenames = {
"i18n.setA.setA",
"i18n.setB.setB"
};
result.setBasenames(basenames);
return result;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor result = new LocaleChangeInterceptor();
result.setParamName("lang");
return result;
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver result = new SessionLocaleResolver();
result.setDefaultLocale(Locale.ENGLISH);
return result;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
Controller
We simply our controller a lot:@Controller
public class MyController {
@RequestMapping(value = "/")
public String home() {
return "index";
}
}
JSP Page
We only keep the index.jsp page, where we add links to change the language of displayed messages:<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!doctype html>
<html lang="en">
<head>
<title>Welcome To Spring MVC Internationalization !!!</title>
</head>
<body>
<h1>Spring MVC Internationalization !!!</h1>
<p>Choose:
<a href="<c:url value='?lang=en'/>">English</a>
| <a href="<c:url value='?lang=fr'/>">French</a>
| <a href="<c:url value='?lang=de'/>">German</a>
</p>
<p>Greetings: <spring:message code="greetings" text="missing" /></p>
<p>Text 2: <spring:message code="text2" text="missing" /></p>
<p>Current: <c:out value="${pageContext.response.locale}" /></p>
</body>
</html>
Running The Example
Once compiled, the example can be run with mvn tomcat:run. Then, browse:http://localhost:8383/spring-mvc-internationalization/
The main page will be displayed:
If you click on German, the German text is displayed:
More Spring related posts here.


thank you for the tutorial
ReplyDeletei always wondering how to make web application supports multi languages,
i thought it was hard, but after see your blog post i can achieve it easily using Spring
once again thank you :)