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
:
Propiedad | Predeterminado | Descripción |
---|---|---|
|
nombre de clase + LOCAL |
Nombre de la cookie |
|
Contenedor de servlets predeterminado |
El tiempo máximo que se almacena una cookie en el lado del cliente. Si se especifica |
|
/ |
Limita la visibilidad de las cookies a una parte específica de su sitio. Si se especifica |
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>
GO TO FULL VERSION