??<前文回顧>
<今日更新>
一、開篇整活兒
今兒個咱嘮嘮 Spring Boot 里頭的國際化。這玩意兒吧,說大不大,說小不小,整好了是錦上添花,整不好就是火上澆油。你要是剛入門,那可得悠著點兒,別一上來就整得自己“翻車”了。
二、國際化是啥玩意兒?
國際化是系統開發里頭的一個核心問題,說白了就是讓系統支持多語言。Spring Boot 里頭默認就集成了國際化,用起來賊方便。
1. 國際化的核心概念
國際化里頭有幾個核心概念:Locale、MessageSource、ResourceBundle。
- Locale:就是語言環境,比如說中文、英文啥的。
- MessageSource:就是消息源,用來獲取多語言的消息。
- ResourceBundle:就是資源包,用來存儲多語言的消息。
2. Spring Boot 的國際化支持
Spring Boot 里頭默認就集成了國際化支持,用起來賊方便。你只要在?application.properties?里頭配個國際化配置,然后在代碼里頭用?MessageSource?獲取多語言的消息就行了。
三、Spring Boot 集成國際化
Spring Boot 里頭集成國際化很簡單,只要加個配置,配個消息源就行了。
1. 添加配置
首先,你得在?application.properties?里頭加個國際化配置。
Properties Code |
spring.messages.basename=messages spring.messages.encoding=UTF-8 |
這段代碼里頭,spring.messages.basename?是消息源的基礎名稱,spring.messages.encoding?是消息源的編碼。
2. 添加消息源
然后,你得在?src/main/resources?目錄下加個消息源文件。
Properties Code |
# messages.properties greeting=Hello, World! # messages_zh_CN.properties greeting=你好,世界! # messages_fr_FR.properties greeting=Bonjour le monde! |
這段代碼里頭,messages.properties?是默認的消息源文件,messages_zh_CN.properties?是中文的消息源文件,messages_fr_FR.properties?是法語的消息源文件。
3. 使用 MessageSource
最后,你可以在代碼里頭用?MessageSource?獲取多語言的消息。
Java Code |
@Service public class MyService { ????@Autowired ????private MessageSource messageSource; ????public String getGreeting(Locale locale) { ????????return messageSource.getMessage("greeting", null, locale); ????} } |
這段代碼里頭,getGreeting?方法用?MessageSource?獲取了多語言的消息。
四、Spring Boot 使用國際化實現多語言的 RESTful API
Spring Boot 里頭使用國際化實現多語言的 RESTful API 很簡單,只要加個配置,配個消息源就行了。
1. 添加配置
首先,你得在?application.properties?里頭加個國際化配置。
Properties Code |
spring.messages.basename=messages spring.messages.encoding=UTF-8 |
這段代碼里頭,spring.messages.basename?是消息源的基礎名稱,spring.messages.encoding?是消息源的編碼。
2. 添加消息源
然后,你得在?src/main/resources?目錄下加個消息源文件。
Properties Code |
# messages.properties greeting=Hello, World! # messages_zh_CN.properties greeting=你好,世界! # messages_fr_FR.properties greeting=Bonjour le monde! |
這段代碼里頭,messages.properties?是默認的消息源文件,messages_zh_CN.properties?是中文的消息源文件,messages_fr_FR.properties?是法語的消息源文件。
3. 使用 LocaleResolver
最后,你可以在代碼里頭用?LocaleResolver?獲取多語言的消息。
Java Code |
@Configuration public class LocaleConfig { ????@Bean ????public LocaleResolver localeResolver() { ????????SessionLocaleResolver localeResolver = new SessionLocaleResolver(); ????????localeResolver.setDefaultLocale(Locale.US); ????????return localeResolver; ????} ????@Bean ????public LocaleChangeInterceptor localeChangeInterceptor() { ????????LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); ????????localeChangeInterceptor.setParamName("lang"); ????????return localeChangeInterceptor; ????} ????@Override ????public void addInterceptors(InterceptorRegistry registry) { ????????registry.addInterceptor(localeChangeInterceptor()); ????} } |
這段代碼里頭,LocaleConfig?類配置了?LocaleResolver?和?LocaleChangeInterceptor,用來獲取多語言的消息。
五、Spring Boot 使用國際化的坑點
1. 消息源文件沒加
Spring Boot 里頭,消息源文件沒加,那國際化就不起作用了。你要是沒加,那可得好好檢查檢查。
2. 消息源編碼不對
Spring Boot 里頭,消息源編碼不對,那國際化就不起作用了。你要是沒配好,那可得好好檢查檢查。
3. LocaleResolver 沒配
Spring Boot 里頭,LocaleResolver?沒配,那國際化就不起作用了。你要是沒配好,那可得好好檢查檢查。
這段代碼里頭,LocaleConfig?類配置了?LocaleResolver?和?LocaleChangeInterceptor,用來獲取多語言的消息。
專有名詞解釋
- 國際化:系統開發里頭的一個核心問題,讓系統支持多語言。
- Locale:語言環境,比如說中文、英文啥的。
- MessageSource:消息源,用來獲取多語言的消息。
- ResourceBundle:資源包,用來存儲多語言的消息。
- LocaleResolver:Spring 里頭的一個接口,用來解析語言環境。
- LocaleChangeInterceptor:Spring 里頭的一個類,用來攔截語言環境的變化。
- SessionLocaleResolver:Spring 里頭的一個類,用來解析會話中的語言環境。
寫在最后
身為一個中古程序猿,我有很多自己想做的事情,比如埋頭苦干手搓一個低代碼數據庫設計平臺(目前只針對寫java的朋友),已經在找朋友內測了,比如很喜歡幫身邊的朋友看看簡歷,講講面試技巧,畢竟工作這么多年,也做到過高管,有很多面人經歷,意見還算有用,大家基本都能拿到想要的offer...
我深刻意識到,能自由做自己喜歡的事情是有多么不容易,又是多么有成就感。所以我拉了兩三個志同道合的好友,開了一間公司,繼續朝著“自由”的目標前進。
當下呢,我們希望有更多的朋友能夠參與到產品的測試中來,體驗并且給出更好的建議。未來可能會在博客po更多關于我們產品的內容,包括使用場景、說明、課程等,希望能對大家有所幫助。
另外,想整個花活兒,每天花個1-2小時,來幫助我素未謀面的老朋友們看看簡歷,提提意見啥的,純屬為愛發電。我在線時間不固定,但是不要米,咱就別要自行車兒了唄~如果您有興趣,可以點擊文章底部卡片一起交流(人工回復,比較慢,請擔待)。
最后,請大家持續關注我們的博客,未來還有很多欄目,一起發掘~!
(來呀~↓↓↓~老鐵)