Implementación de Internacionalización en Spring MVC

Configuración Básica para Internacionalización

Para gestionar contenido multilingüe en Spring MVC, defina un bean de mensajes en la configuración XML:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="mensajes" />
    <property name="useCodeAsDefaultMessage" value="true" />
</bean>

Cotnrolador para Recuperaicón de Mensajes

@Controller
@RequestMapping("/global")
public class ControladorGlobal {

    @GetMapping("/test")
    public String pruebaSolicitud(
        HttpServletRequest solicitud, 
        Model modelo,
        @RequestParam(defaultValue = "es") String idioma
    ) {
        ContextoSolicitud contexto = new ContextoSolicitud(solicitud);
        modelo.addAttribute("moneda", contexto.getMessage("moneda"));
        modelo.addAttribute("fecha", contexto.getMessage("fecha"));
        
        // Lógica adicional del modelo
        return "vistaGlobal";
    }
}

Vista JSP con Etiquetsa de Internacionalización

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<body>
    ${moneda}<br/>
    ${fecha}<br/>
    
    <spring:message code="moneda"/>:<br/>
    <spring:eval expression="modeloContenido.monto"/>
</body>

Implementación Basada en Sesión

Agregue interceptores y resolutores en la configuración:

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
</mvc:interceptors>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>

Modificación del Controlador para Sesiones

@GetMapping("/test")
public String pruebaSesion(
    HttpServletRequest solicitud, 
    Model modelo,
    @RequestParam String tipoIdioma
) {
    Locale locale = tipoIdioma.equals("es") ? 
        new Locale("es", "ES") : Locale.US;
    
    solicitud.getSession().setAttribute(
        SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, 
        locale
    );
    // Lógica de mensajes internacionalizados
}

Implementación Basada en Cookies

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="cookieName" value="idioma"/>
    <property name="cookieMaxAge" value="100000"/>
</bean>

Controlador para Gestión de Cookies

@GetMapping("/test")
public String pruebaCookie(
    HttpServletRequest solicitud,
    HttpServletResponse respuesta,
    @RequestParam String tipoIdioma
) {
    Locale locale = tipoIdioma.equals("es") ? 
        new Locale("es", "ES") : Locale.US;
    
    new CookieLocaleResolver().setLocale(solicitud, respuesta, locale);
    // Lógica de mensajes
}

Implementación Basada en URL

Resolutador personalizado:

public class ResolutadorIdiomaPersonalizado implements LocaleResolver {
    private Locale localeActual;
    
    public Locale resolveLocale(HttpServletRequest solicitud) {
        return localeActual;
    }
    
    public void setLocale(HttpServletRequest solicitud, HttpServletResponse respuesta, Locale locale) {
        localeActual = locale;
    }
}
<bean id="localeResolver" class="paquete.ResolutadorIdiomaPersonalizado"/>

Etiquetas: Spring MVC Internacionalización java ResourceBundle LocaleResolver

Publicado el 6-18 17:19