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;
}
}
Quanto sopra è la mia configurazione di annotazione. Ho praticamente tradotto l'XML del tutorial this.Spring L'annotazione di MVC LocaleChangeInterceptor basata non funziona
Stranamente non funziona quando vado a ...?language=fr
.
Tuttavia, il seguente funziona (in app-servlet.xml
) (avviso qui si sta usando locale
):
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
</mvc:interceptors>
Un'altra cosa importante da notare è che quando ho messo i punti di interruzione sui metodi di cui sopra, tutti e tre loro, ogni punto di interruzione si interrompe, il che implica che "qualcuno" sta leggendo i valori.
Quindi, perché il mio interceptor basato su annotazione non dovrebbe funzionare?
Grazie - il nome del fagiolo è il trucco! – Henrik
Sì, hai ragione. Il nome del bean è la soluzione @Bean (name = "localeResolver") –