Spring Localization Using Java Configuration

Now I will guide you how to performing Localization in Spring using Java Configuration, this is our goal :

our_goal_localize

as default page will showing simple text hello world in English, and when you click “In” at the top-right, these sentence will translate into Bahasa Indonesia.

our_goal_localize_2

Before we start to write code, firstly I would like to show you the project structure, because we don’t use xml configuration, so we write all configuration in Java.

our_goal_structure

Okay and now it’s time to coding … ¬†First create Class ConfigManager.java to make configuration is more easily, please see picture above for the detail package.

ConfigManager.java

package com.hidupbersahaja.rnd.sys.config;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

public class ConfigManager {
	private static PropertiesConfiguration config = null;

    static {
        try {
            config = new PropertiesConfiguration();
            config.setBasePath("config");
            config.setFileName("config/config.properties");
            config.load();
        } catch (ConfigurationException e) {
            throw new RuntimeException("Please configure config.properties properly", e);
        }
    }

    private ConfigManager(){
    }

    public static Configuration getConfiguration(){
        return config;
    }
}

then write some code at your Web Application Config Class  :

WebAppConfig.java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.hidupbersahaja.rnd" })
public class WebAppConfig extends WebMvcConfigurerAdapter{

	private org.apache.commons.configuration.Configuration _config = ConfigManager.getConfiguration();

    @Bean
    public ReloadableResourceBundleMessageSource messageSource(){
    	ReloadableResourceBundleMessageSource bundleSource = new ReloadableResourceBundleMessageSource();
    	bundleSource.setDefaultEncoding("UTF-8");
    	bundleSource.setBasename(_config.getString("locale.language.basename"));
    	return bundleSource;
    }

    @Bean
    public CookieLocaleResolver localeResolver(){
    	CookieLocaleResolver localeResolver = new CookieLocaleResolver();
    	localeResolver.setDefaultLocale(new Locale(_config.getString("locale.language.default")));
    	localeResolver.setCookieName("localCookie");
    	localeResolver.setCookieMaxAge(3600);
    	return localeResolver;
    }
}

at the config.poperties, you can set some configuration such as default language, language param, etc

config.properties

#####################################################################################
# SYSTEM UTILITY
#####################################################################################
locale.language.default=en
locale.language.basename=classpath:language/messages
locale.language.param=lang

create 2 files properties that represent message for each language, such as messages_en.properties for English and messages_in.properties for Bahasa Indonesia, please see project structure for the detail package

messages_en.properties

hello.world=Hello World from INDONESIA !

messages_in.properties

hello.world=Hallo Dunia dari INDONESIA !

at the index.jsp

<%@ include file="../jsp/common/taglibs.jsp"%>
<spring:message code="hello.world" />

And the last for the button chooser EN / IN you can add parameter language (currentURL?lang=en)

<ul class="nav navbar-nav navbar-right">
          		<%
			    	String currentUrl = request.getAttribute("javax.servlet.forward.servlet_path").toString();
			    %>
	            <li class="active">
	            	<a href="${currentUrl }?lang=en">En</a>
	            </li>
	            <li>
	            	<a href="${currentUrl }?lang=in">In</a>
	            </li>
	          </ul>

for the detail list country you can check at :

http://www.java2s.com/Code/Java/I18N/iso6392languagecodecsv.htm

That’s all, Have a nice Weekend !

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>