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;
}
}
上記は私の注釈設定です。私は基本的にチュートリアルのXML thisを翻訳しました。Spring MVC LocaleChangeInterceptor注釈ベースは機能しません
...?language=fr
に行ったとき、奇妙なことに動作しません。
ただし、次の(通知はここでそれがlocale
を使用します)(app-servlet.xml
で)作業を行います。
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
</mvc:interceptors>
注意すべきもう一つの重要な事は、私が上記の方法でブレークポイントを置くときということである、の3の全てそれらのすべてのブレークポイントは中断します。これは、「誰か」が値を読み取っていることを意味します。
なぜ、私の注釈ベースのインターセプタは機能しないのですか?
ありがとうございます - 豆の名前はトリックです! – Henrik
はい、そうです。 Beanの名前はソリューション@Bean(name = "localeResolver")です。 –