SpringBoot系列——i18n國際化

  前言

  國際化是項目中不可或缺的功能,本文將實現springboot + thymeleaf的HTML頁面、js代碼、java代碼國際化過程記錄下來。javascript

 

  代碼編寫

  工程結構html

  每一個文件裏面的值(按工程結構循序從上往下)java

##################默認值#############################
welcome=Welcome
##################英文#############################
welcome=Welcome
##################簡體中文#############################
welcome=歡迎
##################簡體中文#############################
welcome=歡迎

  

  yml配置文件jquery

#注意:在yml文件中添加value值時,value前面須要加一個空格
#2.0.0的配置切換爲servlet.path而不是"-"
server:
  port: 10086 #端口號
  servlet:
    context-path: /springboot #訪問根路徑

spring:
    thymeleaf:
      cache: false  #關閉頁面緩存
      prefix: classpath:/view/  #thymeleaf訪問根路徑
      mode: LEGACYHTML5

    messages:
      basename: static/i18n/messages #指定國際化文件路徑

 

  LocaleConfig.java,git

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class LocaleConfig extends WebMvcConfigurerAdapter {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        // 默認語言
        slr.setDefaultLocale(Locale.US);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 參數名
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }

}

 

  controllergithub

  單純的跳轉頁面便可web

    @RequestMapping("/i18nTest")
    public ModelAndView i18nTest(){
        ModelAndView mv=new ModelAndView();
        mv.setViewName("i18nTest.html");
        return mv;
    }

 

  HTML使用,注意要用 #{} 來取值spring

<!DOCTYPE html>
<!--解決idea thymeleaf 表達式模板報紅波浪線-->
<!--suppress ALL -->
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h3 th:text="#{welcome}"></h3>
    <a href="?lang=en_US">English(US)</a>
    &nbsp;&nbsp;&nbsp;&nbsp;
    <a href="?lang=zh_CN">簡體中文</a>
    &nbsp;&nbsp;&nbsp;&nbsp;
    <a href="?lang=zh_TW">繁體中文</a>
</body>
</html>

 

  js代碼使用緩存

  須要先引入jquery插件,自行百度下載或者使用webjar去拉取,能夠封裝成一個全局方法,用到時直接調用springboot

    <script th:src="@{/js/jquery-1.9.1.min.js}"></script>
    <script th:src="@{/js/jquery.i18n.properties.js}"></script>
<script th:inline="javascript">
    //項目路徑
    ctx = [[${#request.getContextPath()}]];

    //初始化i18n插件
    try {
        $.i18n.properties({
            path: ctx + '/i18n/',
            name: 'messages',
            language: [[${#locale.language+'_'+#locale.country}]],
            mode: "both"
        });
    } catch (e) {
        console.error(e);
    }

    //初始化i18n方法
    function i18n(labelKey) {
        try {
            return $.i18n.prop(labelKey);
        } catch (e) {
            console.error(e);
            return labelKey;
        }
    }

    console.log(i18n("welcome"));
</script>

 

  java代碼使用

  先封裝個工具類,直接靜態調用

@Component
public class I18nUtil {

    private static MessageSource messageSource;

    public I18nUtil(MessageSource messageSource) {
        I18nUtil.messageSource = messageSource;
    }

    /**
     * 獲取單個國際化翻譯值
     */
    public static String get(String msgKey) {
        try {
            return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
        } catch (Exception e) {
            return msgKey;
        }
    }
}

  調用

        System.out.println(I18nUtil.get("welcome"));

 

  效果展現

  默認

 

  英文

 

  中文

 

  繁體

 

   結束語

  文章部分參考:玩轉spring boot——國際化:https://www.cnblogs.com/GoodHelper/p/6824492.html

 

  代碼開源

  代碼已經開源、託管到個人GitHub、碼雲:

  GitHub:https://github.com/huanzi-qch/springBoot

  碼雲:https://gitee.com/huanzi-qch/springBoot

相關文章
相關標籤/搜索