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 :)