Most parts of Spring's architecture support internationalization,
just as the Spring web MVC framework does.
DispatcherServlet
enables you to automatically
resolve messages using the client's locale. This is done with
LocaleResolver
objects.
When a request comes in, the
DispatcherServlet
looks for a locale resolver and
if it finds one it tries to use it to set the locale. Using the
RequestContext.getLocale()
method, you can always
retrieve the locale that was resolved by the locale resolver.
Besides the automatic locale resolution, you can also attach an interceptor to the handler mapping (see Section 15.4.1, “Intercepting requests - the HandlerInterceptor interface” for more information on handler mapping interceptors), to change the locale under specific circumstances, based on a parameter in the request, for example.
Locale resolvers and interceptors are all defined in the
org.springframework.web.servlet.i18n
package, and are
configured in your application context in the normal way. Here is a
selection of the locale resolvers included in Spring.
This locale resolver inspects the
accept-language
header in the request that was sent
by the browser of the client. Usually this header field contains the
locale of the client's operating system.
This locale resolver inspects a Cookie
that
might exist on the client, to see if a locale is specified. If so, it
uses that specific locale. Using the properties of this locale resolver,
you can specify the name of the cookie, as well as the maximum age. Find
below an example of defining a
CookieLocaleResolver
.
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <property name="cookieName" value="clientlanguage"/> <!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) --> <property name="cookieMaxAge" value="100000"> </bean>
Table 15.4. CookieLocaleResolver
properties
Property | Default | Description |
---|---|---|
cookieName | classname + LOCALE | The name of the cookie |
cookieMaxAge | Integer.MAX_INT | The maximum time a cookie will stay persistent on the client. If -1 is specified, the cookie will not be persisted. It will only be available until the client shuts down his or her browser. |
cookiePath | / | Limits the visibility of the cookie to a certain part of your site.. When cookiePath is specified, the cookie will only be visible to that path, and the paths below it. |
The SessionLocaleResolver
allows you to
retrieve locales from the session that might be associated with the
user's request.
You can build in changing of locales by adding the
LocaleChangeInterceptor
to one of the handler
mappings (see Section 15.4, “Handler mappings”). It will detect a
parameter in the request and change the locale. It calls
setLocale()
on the
LocaleResolver
that also exists in the
context. The following example shows that calls to all
*.view
resources containing a parameter named
siteLanguage
will now change the locale. So, for
example, a request for the following URL,
http://www.sf.net/home.view?siteLanguage=nl
will
change the site language to Dutch.
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="siteLanguage"/> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="localeChangeInterceptor"/> </list> </property> <property name="mappings"> <value>/**/*.view=someController</value> </property> </bean>