Spring MVC internationalization example

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="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
		<property name="interceptors">
			<ref bean="localeChangeInterceptor" />

See full example below

<beans xmlns="http://www.springframework.org/schema/beans"
	<bean id="localeResolver"
		<property name="defaultLocale" value="en" />
	<bean id="localeChangeInterceptor"
		<property name="paramName" value="language" />
	<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
		<property name="interceptors">
			<ref bean="localeChangeInterceptor" />
	<!-- Register the bean -->
	<bean class="com.mkyong.common.controller.WelcomeController" />
	<!-- Register the welcome.properties -->
	<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="http://www.springframework.org/tags" %>
<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
Tags :

About the Author

Founder of Mkyong.com and HostingCompass.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.


  • Pingback: ionizer loans()

  • Pingback: HD Coloring Pages()

  • Pingback: electrician training books()

  • Pingback: electrician pouch for sale()

  • Pingback: house blue()

  • Pingback: zak?ad szklarski piotrków trybunalski()

  • Pingback: paypal loans()

  • Pingback: pay day loans()

  • Pingback: joe the plumber turns on mccain()

  • Pingback: how to do bathroom plumbing yourself()

  • Pingback: water ionizer loan()

  • Pingback: sms laan nu()

  • Pingback: alkaline water machine()

  • Pingback: water ionizer()

  • Pingback: car parking()

  • Pingback: parking()

  • Pingback: lan penge nu()

  • Pingback: mobile porn movies()

  • Pingback: Blue Coaster33()

  • Pingback: spring startup | hkmysc blog()

  • Pingback: fmt:message vs spring:message | BUYWORKSELL()

  • lingtongbach

    May I ask you: When I type the link
    it still displays the page
    but if I type
    it won’t
    is there any secret about that “welcome”, why just need “welcome” to display the page

  • Piyush

    I am also getting the junk char at UI (Using html 5 , added in html file)
    I am using the ResourceBundleMessageSource class, properties file are nativetoascii converted. Kindly do let me know what all setting need to be done so that char at ui will come properly.

    I have tried initialize the beans

  • sujith ks

    Hi firnd,
    all your articles in spring are very informative and practical.

  • kingloo


    • kingloo

      I downloaded your demo run , you can not switch the language , has been shown in Chinese , I would like to ask why

  • wtf

    this lines of code totally screwed up with my dispatcher, i totally can’t see shit after adding it.

    Lousy example, doesn’t show u how u integrate with existing internal view resolver, don’t follow.

  • vipul

    Hi young,

    why your multi language example run on link welcome.htm rather than WelcomePage.htm which your made under jsp folder and reference at java file

  • Anand Soni

    plz tell me that is it will read UTF-8 encoding properties file????

  • kiranmayiv

    hi yong, i am integrating spring web mvc with jforum , so that i have changed sso implementation in jforum as authenticated user property as follows
    public String authenticateUser(RequestContext request) {
    return (String) request.getSessionContext().getAttribute(“forumUser”);
    public boolean isSessionValid(UserSession userSession, RequestContext request) {
    return ((request.getSessionContext().getAttribute(“forumUser”) != null ) ? true:false);

    but in my spring login application if i set @sessionAttributes({“forumUser”}), then the user becomes anonymous in jforum,

    if i trie with the following

    String userName = userDetails.getUsername();
    if(getSession().getAttribute(“forumUser”) == null){
    getSession().setAttribute(“forumUser”, userName);
    in login() method it is working fine, instead of writing this code, is there any simple way to integrate both of them

  • madhu

    hi ….
    i am strugling with one problm in spring
    how to get the query string vaue into contrloer
    Subject:——<a href='viewselectedposts.html?subject='>${post.subject}
    plz send solution this mail:[email protected],[email protected]

  • lakshmi

    Why that link, English and Chinese, We can select language in System Itself. What we have to if we want to support more then one language.

  • Pingback: Spring MVC Internalization « Notes to Remember()

  • Malathi Dali

    How to resolve HttpServletRequest and Response in i18n

    • madhu

      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.

  • zoff

    pls Spring MVC internationalization annotation example ?

    • Eric Francis

      IS this correct?

      public ControllerClassNameHandlerMapping handlerMapping() {
      ControllerClassNameHandlerMapping ccnhm = new ControllerClassNameHandlerMapping();
      Object[] interceptors = new Object[1];
      interceptors[0] = localeChangeInterceptor();
      return ccnhm;

  • Pingback: Spring MVC Tutorials()