membersound:
私が言うことができspring-boot
、自動的に要求された解決するためにlocale
例えば、queryparameterで&lang=en
?
私は上のクエリのparam優先させていただきたいと思いAccept-Language
パラメータ。
私は、次の2つのプロパティを見つけませんが、クエリのparamについては何も。
spring.mvc.locale= # Locale to use. By default, this locale is overridden by the "Accept-Language" header.
spring.mvc.locale-resolver=accept-header # Define how the locale should be resolved.
例外を与える、次のように私が試しました:
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
での結果:
java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy
membersound:
次のように解決策は、おそらくです。それでも私は非常に直観に反しセットアップを見つけます。特に、私はそれを期待しているだろう。
LocaleChangeInterceptor
レジスタそのものではなく、呼び出す必要はありませんし、addInterceptors()
明示的なspring.mvc.locale
パラメータは、まだカスタムLocaleResolverに設定されていますが、およびから手動で上書きする必要はありません。WebMvcProperties
このすべてが必要な場合は、ドキュメントは、おそらくこれに関する詳細な説明が必要になる場合があります。
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
@Bean
public AcceptHeaderLocaleResolver localeResolver(WebMvcProperties mvcProperties) {
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver() {
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
LocaleContextHolder.setLocale(locale);
}
};
localeResolver.setDefaultLocale(mvcProperties.getLocale());
return localeResolver;
}
}
議論の後に改良版を更新します。
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Bean
public AcceptHeaderLocaleResolver localeResolver(WebMvcProperties mvcProperties) {
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver() {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String locale = request.getParameter("lang");
return locale != null
? org.springframework.util.StringUtils.parseLocaleString(locale)
: super.resolveLocale(request);
}
};
localeResolver.setDefaultLocale(mvcProperties.getLocale());
return localeResolver;
}
}