Adding multi-language support to JSP based applications is very simple. In this post we will investigate the method that you can use to externalize your text based content.
NOTE: Additional work is required to establish the Locale, format Dates and Numbers or to support other differences such as text-direction.
JSP:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setLocale value="en_US" />
<fmt:setBundle basename="ResourceBundles.TestBundle" scope="request" var="rb" />
<fmt:message bundle="${rb}" key="label.test" />
/src/ResourceBundles/TestBundle.properties:
label.test=test(default)
/src/ResourceBundles/TestBundle_en.properties
label.test=test(en)
/src/ResourceBundles/TestBundle_en_US.properties
label.test=test(en_US)
You can also specify some default Locale information in web.xml if you do not wish to use the
/WEB-INF/web.xml
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
<param-value>en</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
<param-value>en</param-value>
</context-param>
Some explanation… in this case we’ve told our JSP that the resources are in the TestBundle properties. As the Locale is set to ‘en_US’ it will first look in the TestBundle_en_US.properties file, if not found it will then look in TestBundle_en.properties and finally in TestBundle.properties. If not found there, the output will generally be in the form ‘???key???
‘, in this example: ‘???label.test???
‘, my understanding is that this can be suppressed by setting ‘allowNull=true
‘ somewhere, but I have never found that setting to date.
REFERENCES: