之前没有考虑过如何实现国际化,在这次的香港项目中,客户要求繁体切换简体功能,有了这篇文章。
快速入门
第一步:构建一个基础的Spring Boot应用
第二步:在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
第三步:创建应用主类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
第四步:配置文件resources下新建文件夹
welcome=hello welcome
注意必须是messages打头
第五步:创建国际化配置文件,继承WebMvcConfigurationSupport
/**
* Description:
* @date 2018.06.05 9:16
*/
@Configuration
public class WebConfiguration extends WebMvcConfigurationSupport {
/**
* cookie区域解析器
*
* @return
*/
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver slr = new CookieLocaleResolver();
//设置默认区域,
slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
slr.setCookieMaxAge(3600);//设置cookie有效期.
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 设置请求地址的参数,默认为:locale
lci.setParamName(LocaleChangeInterceptor.DEFAULT_PARAM_NAME);
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
application.yml文件配置
spring:
messages:
basename: i18n/messages
encoding: UTF-8
cache-seconds: 3600
第六步:MessageSource类可以获取messages的内容。
@Component
public class LocaleMessageSourceUtil {
@Resource
private MessageSource messageSource;
public String getMessage(String code) {
return getMessage(code, null);
}
/**
*
* @param code :对应messages配置的key.
* @param args : 数组参数.
* @return
*/
public String getMessage(String code, Object[] args){
return getMessage(code, args, "");
}
/**
*
* @param code :对应messages配置的key.
* @param args : 数组参数.
* @param defaultMessage : 没有设置key的时候的默认值.
* @return
*/
public String getMessage(String code,Object[] args,String defaultMessage){
//这里使用比较方便的方法,不依赖request.
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(code, args, defaultMessage, locale);
}
}
第七步:前端调用HelloController.java
@Controller
public class HelloController {
@Autowired
private LocaleMessageSourceUtil messageSourceUtil;
@RequestMapping("/hello")
public String hello() {
String welcome = messageSourceUtil.getMessage("welcome");
System.out.println(welcome);
return "hello";
}
}
第八步:http调用测试
参数locale= en_US,返回英文
参数locale=zh_CN ,返回简体中文