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
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 16.4.3, “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
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
<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>
|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||/||Using this parameter, you can limit 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.|
SessionLocaleResolver allows you to
retrieve locales from the session that might be associated with the
You can build in changing of locales using the
LocaleChangeInterceptor. This interceptor needs
to be added to one of the handler mappings (see Section 16.4, “Handler mappings”). It will detect a parameter in the
request and change the locale (it calls
LocaleResolver that also exists in
<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>
All calls to all
*.view resources containing a
siteLanguage will now change the
locale. So a request for the following URL,
change the site language to Dutch.