form - Spring: configuración de la configuración regional
spring framework tags (4)
Configuré Spring como se especifica en la siguiente guía: http://www.springbyexample.org/examples/basic-webapp-internationalization-spring-config.html
Si tuviera que agregar? Locale = fr, por ejemplo, al final de una URL, la configuración regional cambiará a francés.
Sin embargo, en mi caso, quiero configurar la configuración regional cuando el usuario inicia sesión ya que esta información está asociada a su perfil. Intenté usar localeResolver.setLocale (solicitud, respuesta, nueva configuración regional ("fr")) (donde localeResolver es una instancia de SessionLocaleResolver) para especificar la configuración regional, pero esto no tiene ningún efecto.
¿Alguna idea de lo que estoy haciendo mal? ¿Me estoy acercando a este tema de la manera correcta?
¿Cómo se determina que la configuración regional no se ha establecido? Si espera que la configuración regional correcta esté presente en HttpServletRequest
, esto no es cierto: su valor es manejado por el contenedor de servlets y, por lo tanto, es inmutable. En su lugar, debe confiar en que Spring inyectará un valor adecuado a un parámetro de método con la configuración Locale
clase en su controlador. Otra forma de obtener la configuración regional es mediante el uso de RequestContextUtils.getLocale(HttpServletRequest request)
directamente.
Probablemente puedas echarle un vistazo al proyecto Spring Roo. Hay un complemento de internacionalización de Spring que se está utilizando en Spring Roo que permite el cambio rápido de Locale dentro de una aplicación web de Spring generada automáticamente desde Roo.
Yo recomendaría tratar de configurar la configuración regional predeterminada como:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="fr_FR" />
</bean>
Alguna información útil está en la publicación del blog Configuración del cambio de configuración regional con Spring MVC 3 .
localeResolver.setLocale funciona bien para mí, pruebe algo como esto:
applicationContext
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="messages/messages" p:fallbackToSystemLocale="false" />
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
my_page.jsp
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<html>
<body>
<p><spring:message code="my.message"/></p>
</body>
</html>
/ src / main / resources / messages / messages.properties
my.message = Mensaje (idioma predeterminado)
/ src / main / resources / messages / messages_en.properties
my.message = Mensaje en inglés
/ src / main / resources / messages / messages_fr.properties
my.message = Mensaje en francés
Controlador
@Controller
@RequestMapping("/")
public class SampleController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String welcome(HttpServletRequest request, HttpServletResponse response) {
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
localeResolver.setLocale(request, response, StringUtils.parseLocaleString("fr"));
return "my_page";
}
}
Con este código recibo "Mensaje en francés", si cambio "fr" a "en" obtengo "Mensaje en inglés", y sin la llamada a setLocale obtengo "Mensaje (idioma predeterminado)". Cambiar StringUtils.parseLocaleString ("fr") a la nueva configuración regional ("fr") da los mismos resultados.