import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
@Configuration
public class Config {
@Bean
public LocaleResolver localeResolver() {
final CookieLocaleResolver ret = new CookieLocaleResolver();
ret.setDefaultLocale(new Locale("en_US"));
return ret;
}
@Bean
public MessageSource messageSource() {
final ReloadableResourceBundleMessageSource ret = new ReloadableResourceBundleMessageSource();
ret.setBasename("classpath:lang");
ret.setDefaultEncoding("UTF-8");
return ret;
}
@Bean
public HandlerMapping handlerMapping() {
final LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("language");
final DefaultAnnotationHandlerMapping ret = new DefaultAnnotationHandlerMapping();
ret.setInterceptors(new Object[] { interceptor });
return ret;
}
}
Lo anterior es la configuración de mi anotación. Básicamente, traduje el XML del tutorial this.Spring MVC LocaleChangeInterceptor basado en la anotación no funciona
Extrañamente, no funciona cuando voy al ...?language=fr
.
Sin embargo, la siguiente funciona (en app-servlet.xml
) (nótese que aquí se trata de utilizar locale
):
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
</mvc:interceptors>
Otra cosa importante a tener en cuenta es que cuando pongo puntos de interrupción en los métodos anteriores, todos los tres ellos, cada punto de quiebre se rompe, lo que implica que "alguien" está leyendo los valores.
Entonces, ¿por qué no funcionaría mi interceptor basado en anotaciones?
Thanks - the name of the bean es el truco! – Henrik
Sí, tienes razón. El nombre de bean es la solución @Bean (name = "localeResolver") –