DispatcherServlet使得开发人员可以通过客户端的Locale来自动转换消息进行国际化;在整个国际化的过程中,主要分成两步,一是解析客户端的Locale,一是查找国际化的消息;
1. 解析Locale
解析Locale是通过LocaleResolver来完成的。
当有请求时,DispatcherServlet查找LocaleResolver类型的Bean,如果找到,则使用它获取并设置Locale。在这之后,通过RequestContext.getLocale方法则可以获取到Locale。
Spring默认在i18n包中提供了几种实现,如通过Cookie、Header、Session等方式来获取Locale的实现等。
1.1 定义所使用的LocaleResolver:
Spring Boot中可以通过Bean注解来定义所使用的LocaleResolver
@Configuration
public class AdditionalBeanConfig {
@Bean
public LocaleResolver getLocalResolver() {
return new CookieLocaleResolver();
}
}
默认情况下,SpringBoot中是没有包含LocaleResolver对象的。
1.2 获取Locale
如果需要在应用中获取当前客户端所使在的Locale,在Controller中通过以下方式查找Locale:
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/locale")
public String locale(HttpServletRequest request) {
// 第一种方式,通过构建RequestContext来查找Locale
RequestContext requestContext = new RequestCon