What is i18n and L10n?
In computing, internationalization and localization are means of adapting computer software to different languages and regional differences. Internationalization is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes. Localization is the process of adapting internationalized software for a specific region or language by adding locale-specific components and translating text.The terms are frequently abbreviated to the numeronyms i18n (where 18 stands for the number of letters between the first i and last n in internationalization) and L10n respectively, due to the length of the words. The capital L in L10n helps to distinguish it from the lowercase i in i18n.
Our Goal
Our goal is to add Internationalization and Localization support to our Spring MVC application. Once finished our app will look like.We will add two languages support to our application: English and German. Depending on the locale setting of users browser, the appropriate language will be selected. Also user will be able to select the language from top-right corner of the application.
Message Resouces File
We will create two properties file which will contain all the messages to be displayed in the application. These files are kept in a source folder called “resources”. Create a source folder in your project by Right click on Project name > New > Source Folder and name it resources.Create two files
messages_en.properties
and messages_de.properties
in this folder and copy following content into it.File: resources/messages_en.properties
label.firstname=First Name label.lastname=Last Name label.email=Email label.telephone=Telephone label.addcontact=Add Contact label.menu=Menu label.title=Contact Manager label.footer=© test |
label.firstname=Vorname label.lastname=Familiename label.email=Email label.telephone=Telefon label.addcontact=Addieren Kontakt label.title=Kontakt Manager label.menu=Menü label.footer=© test |
Configuring Internationalization (i18n) / Localization (L10n) in Spring MVC
Now we have created message resource properties for our application. We need to declare these files in spring configuration file. We will use classorg.springframework.context.support.ReloadableResourceBundleMessageSource
to define the message resources.Also, note that we will provide a feature where user will be able to select language for the application. This is implemented by using
org.springframework.web.servlet.i18n.LocaleChangeInterceptor
class. The LocaleChangeInterceptor class will intercept any changes in the locale. These changes are then saved in cookies for future request. org.springframework.web.servlet.i18n.CookieLocaleResolver
class will be used to store the locale changes in cookies.Add following code in the spring-servlet.xml file.
File:WebContent/WEB-INF/spring-servlet.xml
< bean id = "messageSource" class = "org.springframework.context.support.ReloadableResourceBundleMessageSource" > < property name = "basename" value = "classpath:messages" /> < property name = "defaultEncoding" value = "UTF-8" /> </ bean > < bean id = "localeChangeInterceptor" class = "org.springframework.web.servlet.i18n.LocaleChangeInterceptor" > < property name = "paramName" value = "lang" /> </ bean > < bean id = "localeResolver" class = "org.springframework.web.servlet.i18n.CookieLocaleResolver" > < property name = "defaultLocale" value = "en" /> </ bean > < bean id = "handlerMapping" class = "org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" > < property name = "interceptors" > < ref bean = "localeChangeInterceptor" /> </ property > </ bean >
|
Change the View – The JSPs
Now as we have created two message resources files and configured it in Spring MVC, we will use these messages in the JSP files. Open all the JSP files of our demo application and update with following code.File:WebContent/WEB-INF/jsp/header.jsp
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> < h3 >< spring:message code = "label.title" /></ h3 > < span style = "float: right" > < a href = "?lang=en" >en</ a > | < a href = "?lang=de" >de</ a > </ span > |
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> < p >< spring:message code = "label.menu" /></ p > |
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> < spring:message code = "label.footer" />
|
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> < html > < head > < title >Spring 3 MVC Series - Contact Manager</ title > </ head > < body > < form:form method = "post" action = "addContact.html" > < table > < tr > < td >< form:label path = "firstname" >< spring:message code = "label.firstname" /></ form:label ></ td > < td >< form:input path = "firstname" /></ td > </ tr > < tr > < td >< form:label path = "lastname" >< spring:message code = "label.lastname" /></ form:label ></ td > < td >< form:input path = "lastname" /></ td > </ tr > < tr > < td >< form:label path = "lastname" >< spring:message code = "label.email" /></ form:label ></ td > < td >< form:input path = "email" /></ td > </ tr > < tr > < td >< form:label path = "lastname" >< spring:message code = "label.telephone" /></ form:label ></ td > < td >< form:input path = "telephone" /></ td > </ tr > < tr > < td colspan = "2" > < input type = "submit" value = "<spring:message code=" label.addcontact"/>"/> </ td > </ tr > </ table > </ form:form > </ body > </ html >
|
<spring:message>
tag to display the message from resource bundle.One thing that we must note here is that in header.jsp file, we have specified two links to select language. The link sets a request parameter ?lang=
LocaleChangeInterceptor
interceptor and change the local accordingly. Also note that while configuring LocaleChangeInterceptor
in spring-servlet.xml file, we have specified property “paramName” with value “lang”< property name = "paramName" value = "lang" /> |
No comments:
Post a Comment