國際化是項目中不可或缺的功能,本文將實現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> <a href="?lang=zh_CN">簡體中文</a> <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、碼雲: