Spring boot 1.5.9 实现国际化

之前没有考虑过如何实现国际化,在这次的香港项目中,客户要求繁体切换简体功能,有了这篇文章。

快速入门

第一步:构建一个基础的Spring Boot应用

第二步:在pom.xml中引入依赖

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
        
        
            junit
            junit
        

        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

    

第三步:创建应用主类

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

第四步:配置文件resources下新建文件夹

Spring boot 1.5.9 实现国际化_第1张图片
image.png

welcome=hello welcome

注意必须是messages打头

第五步:创建国际化配置文件,继承WebMvcConfigurationSupport


/**
 * 类职责:
 * 

* Title: MainController.java * Description: * Copyright: Copyright (c) 2018 杭州云赢网络科技有限公司 * Company: 杭州云赢网络科技有限公司 * * @author [email protected] * @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调用测试

image.png

参数locale= en_US,返回英文
参数locale=zh_CN ,返回简体中文

你可能感兴趣的:(Spring boot 1.5.9 实现国际化)