La mayor parte de la arquitectura Spring admite la internacionalización, al igual que el marco web Spring MVC. DispatcherServlet le permite reconocer mensajes automáticamente utilizando la configuración regional (locale) del cliente. Esto se hace utilizando objetos LocaleResolver.

Cuando llega una solicitud, DispatcherServlet busca un solucionador local y, si lo encuentra, intenta usarlo para configurar la configuración regional. Usando el método RequestContext.getLocale(), siempre puedes obtener la configuración regional reconocida por el solucionador de configuración regional.

Además de la detección automática de la configuración regional, también puede vincular un interceptor a las asignaciones de controladores para cambiar la configuración regional en determinadas circunstancias (por ejemplo, según un parámetro de la solicitud).

Los interceptores y solucionadores locales se definen en el paquete org.springframework.web.servlet.i18n y se configuran en el contexto de su aplicación como de costumbre. Spring incluye el siguiente conjunto de solucionadores locales.

  • Zona horaria

  • Reconocedor de títulos

  • Reconocedor de cookies

  • Reconocedor de sesiones

  • Interceptor de configuración regional

Zona horaria

Además de obtener la configuración regional del cliente, suele ser útil conocer su zona horaria. La interfaz LocaleContextResolver proporciona una extensión LocaleResolver que permite a los solucionadores proporcionar un LocaleContext más funcional que puede contener información de zona horaria.

Si está disponible, la TimeZone del usuario se puede obtener utilizando el método RequestContext.getTimeZone(). La información de zona horaria es utilizada automáticamente por todos los objetos de fecha/hora Converter y Formatter que están registrados con ConversionService de Spring.

Reconocedor de encabezado

Este solucionador local verifica el encabezado accept-language en una solicitud enviada por un cliente (como un navegador web). Normalmente, este campo de encabezado contiene la configuración regional del sistema operativo del cliente. Tenga en cuenta que este solucionador no admite información de zona horaria.

Reconocedor de cookies

Este solucionador local verifica las Cookies que pueden existir en el lado del cliente con la locale o TimeZone especificada. Si hay alguno, se utiliza la información especificada. Usando las propiedades de este reconocedor local, puede configurar el nombre de la cookie así como la fecha de vencimiento máxima. El siguiente ejemplo define 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 saved (deleted when the browser is closed) -->
    <property name="cookieMaxAge" value="100000"/>
</bean>

La siguiente tabla describe las propiedades de CookieLocaleResolver:

Reconocedor de sesiones

SessionLocaleResolver le permite obtener Locale y TimeZone de una sesión que se puede asociar con una solicitud de usuario. A diferencia de CookieLocaleResolver, esta estrategia almacena la configuración regional seleccionada localmente en HttpSession del contenedor de servlets. Como consecuencia, estas configuraciones son temporales para cada sesión y, por lo tanto, se pierden cuando finaliza cada sesión.

Tenga en cuenta que no existe una conexión directa con mecanismos externos de gestión de sesiones, como el proyecto Spring Session. Este SessionLocaleResolver evalúa y modifica los atributos HttpSession correspondientes en el HttpServletRequest actual.

Interceptor de configuración regional

Puede habilitar el cambio de configuración regional agregando un LocaleChangeInterceptor a una de las definiciones de HandlerMapping. Detecta el parámetro en la solicitud y cambia la configuración regional en consecuencia llamando al método setLocale en LocaleResolver en el contexto de la aplicación del despachador. El siguiente ejemplo muestra que las llamadas a todos los recursos *.view que contienen un parámetro denominado siteLanguage ahora cambiarán la configuración regional. Entonces, por ejemplo, una solicitud a la URL https://www.sf. net /home.view?siteLanguage=nl cambia el idioma del sitio a holandés. El siguiente ejemplo muestra cómo interceptar la configuración regional:

<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>