In Spring MVC application, comes with few “LocaleResolver” to support the internationalization or multiple languages features. In this tutorial, it shows a simple welcome page, display the message from properties file, and change the locale based on the selected language link.

1. Project Folder

Directory structure of this example.


2. Properties file

Two properties files to store English and Chinese messages.

welcome.springmvc = Happy learning Spring MVC

welcome.springmvc = \u5feb\u4e50\u5b66\u4e60 Spring MVC
For UTF-8 or non-English characters , you can encode it with native2ascii tool.

3. Controller

Controller class, nothing special here, all the locale stuff is configure in the Spring’s bean configuration file later.

package com.mkyong.common.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class WelcomeController extends AbstractController{
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response) throws Exception {

		ModelAndView model = new ModelAndView("WelcomePage");
		return model;


4. Spring Configuration

To make Spring MVC application supports the internationalization, register two beans :

1. SessionLocaleResolver
Register a “SessionLocaleResolver” bean, named it exactly the same characters “localeResolver“. It resolves the locales by getting the predefined attribute from user’s session.

If you do not register any “localeResolver”, the default AcceptHeaderLocaleResolver will be used, which resolves the locale by checking the accept-language header in the HTTP request.

2. LocaleChangeInterceptor
Register a “LocaleChangeInterceptor” interceptor and reference it to any handler mapping that need to supports the multiple languages. The “paramName” is the parameter value that’s used to set the locale.

In this case,

  1. welcome.htm?language=en – Get the message from English properties file.
  2. welcome.htm?language=zh_CN – Get the message from Chinese properties file.

	<bean id="localeChangeInterceptor"
		<property name="paramName" value="language" />
	<bean class="" >
		<property name="interceptors">
			<ref bean="localeChangeInterceptor" />

See full example below

<beans xmlns=""

	<bean id="localeResolver"
		<property name="defaultLocale" value="en" />

	<bean id="localeChangeInterceptor"
		<property name="paramName" value="language" />
	<bean class="" >
		<property name="interceptors">
			<ref bean="localeChangeInterceptor" />
	<!-- Register the bean -->
	<bean class="com.mkyong.common.controller.WelcomeController" />

	<!-- Register the -->
	<bean id="messageSource"
		<property name="basename" value="welcome" />

	<bean id="viewResolver"
    	class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix">
        <property name="suffix">


5. JSP

A JSP page, contains two hyperlinks to change the locale manually, and use the spring:message to display the message from the corresponds properties file by checking the current user’s locale.


<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="spring" uri="" %>
<h1>Spring MVC internationalization example</h1>

Language : <a href="?language=en">English</a>|<a href="?language=zh_CN">Chinese</a>

welcome.springmvc : <spring:message code="welcome.springmvc" text="default text" />

Current Locale : ${pageContext.response.locale}

The ${pageContext.response.locale} can be used to display the current user’s locale.
Remember put the “<%@ page contentType=”text/html;charset=UTF-8″ %>” on top of the page, else the page may not able to display the UTF-8 (Chinese) characters properly.

7. Demo

Access it via http://localhost:8080/SpringMVC/welcome.htm, change the locale by clicking on the language’s link.

1. English locale – http://localhost:8080/SpringMVC/welcome.htm?language=en


2. Chinese locale – http://localhost:8080/SpringMVC/welcome.htm?language=zh_CN


Download Source Code


  1. Spring MVC LocaleResolver Documentation