Spring Boot REST國際化的實現(xiàn)代碼
本指南將向您展示如何輕松只需幾個簡單的步驟即可實現(xiàn)Spring Boot應(yīng)用的國際化,從而總是在一個地方處理語言環(huán)境問題。
我們將討論如何在現(xiàn)有的Spring Boot項目中添加國際化。當您處理應(yīng)該為來自不同國家/地區(qū)的用戶提供不同語言服務(wù)的項目時,app國際化的問題變得很常見。比如,你需要向中國用戶提供中文回復信息,并向法國用戶提供法語信息,那么讓我們來看看如何在Spring Boot中實現(xiàn)它。
讓我們使用Spring Initializer創(chuàng)建項目 ,這使得項目的創(chuàng)建更容易。選擇Web,Security,JPA,Actuator,Devtools等模塊。
下載項目后,解壓縮,并用打開IntelliJ IDEA打開。
第一件事是創(chuàng)建CustomLocaleResolver類,它將負責定義用戶的語言環(huán)境。
@Configuration <b>public</b> <b>class</b> CustomLocaleResolver <b>extends</b> AcceptHeaderLocaleResolver implements WebMvcConfigurer { List<Locale> LOCALES = Arrays.asList( <b>new</b> Locale(<font>"en"</font><font>), <b>new</b> Locale(</font><font>"fr"</font><font>)); @Override <b>public</b> Locale resolveLocale(HttpServletRequest request) { String headerLang = request.getHeader(</font><font>"Accept-Language"</font><font>); <b>return</b> headerLang == <b>null</b> || headerLang.isEmpty() ? Locale.getDefault() : Locale.lookup(Locale.LanguageRange.parse(headerLang), LOCALES); } @Bean <b>public</b> ResourceBundleMessageSource messageSource() { ResourceBundleMessageSource rs = <b>new</b> ResourceBundleMessageSource(); rs.setBasename(</font><font>"messages"</font><font>); rs.setDefaultEncoding(</font><font>"UTF-8"</font><font>); rs.setUseCodeAsDefaultMessage(<b>true</b>); <b>return</b> rs; } } </font>
這里告訴我們項目中支持2個語言環(huán)境:en和fr。在名為“ Accept-Language ” 的http的Header中傳遞語言環(huán)境。因此,如果Header存在這個變量名且它不為空,我們將使用它的語言環(huán)境,否則 - 我們將使用默認語言環(huán)境,即en。
接下來讓我們創(chuàng)建一個類,負責根據(jù)指定的語言環(huán)境選擇正確的語言信息。我將其稱為Translator,它將有一個單獨的方法,它將接受應(yīng)翻譯的信息代碼。
@Component <b>public</b> <b>class</b> Translator { <b>private</b> <b>static</b> ResourceBundleMessageSource messageSource; @Autowired Translator(ResourceBundleMessageSource messageSource) { Translator.messageSource = messageSource; } <b>public</b> <b>static</b> String toLocale(String msgCode) { Locale locale = LocaleContextHolder.getLocale(); <b>return</b> messageSource.getMessage(msg, <b>null</b>, locale); } }
messageSource.getMessage(...)接受入?yún)ⅰ癿sg”。但這并不是應(yīng)該翻譯的信息,它只是信息代碼?,F(xiàn)在我們還沒有任何信息代碼定義,所以現(xiàn)在定義信息代碼。
在resources文件夾下,創(chuàng)建兩個文件:messages.properties和messages_fr.properties。
這是messages.properties的內(nèi)容:
hello=Hello World! welcome=Welcome to this guide!
這里是messages_fr.properties的內(nèi)容:
hello=Bonjour le Monde! welcome=Bienvenue dans ce guide!
在這里我們已經(jīng)定義了我們的消息代碼。他們是“ hellp ”和“ welcome ”?,F(xiàn)在你可以指導我們應(yīng)該將哪些代碼傳遞給toLocale(String msgCode)方法,這樣才能根據(jù)用戶的語言環(huán)境獲取適當?shù)南ⅰ?/p>
可能最后一步是創(chuàng)建簡單的控制器,讓我們將它命名為MainController,它只有一個端點,它將接受消息代碼,我們將其作為請求參數(shù)傳遞給HTTP請求。
@RestController @RequestMapping(value =“/ api”) <b>public</b> <b>class</b> MainController { @GetMapping() <b>public</b> String getMessage(@RequestParam(“msg”)String msg){ <b>return</b> Translator。toLocale(msg) ; } }
現(xiàn)在已經(jīng)完成!
使用CURL發(fā)出簡單的請求:
curl -X GET -H "Accept-Language: fr" 'http://localhost:8080/api?msg-welcome'
這個將返回法語的welcome信息:
Bienvenue dans ce guide!
再發(fā)出請求:
curl -X GET -H "Accept-Language: en" 'http://localhost:8080/api?msg-welcome'
這個將返回英語的welcome信息:
welcome to this guide!
正如你看到:響應(yīng)會根據(jù)請求中傳遞的“ Accept-Language ”標頭的值而有所不同。這樣,我們不需要檢查每個控制器方法中請求中傳遞的內(nèi)容,然后將其進一步傳遞給服務(wù)層。我們現(xiàn)在可以在一個單獨的地方執(zhí)行此操作,即CustomLocaleResolver類。
源碼: GitHub
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
centos7如何通過systemctl啟動springboot服務(wù)代替java -jar方式啟動
這篇文章主要介紹了centos7如何通過systemctl啟動springboot服務(wù)代替java -jar方式啟動,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01Java調(diào)用opencv實現(xiàn)圖片矯正功能
這篇文章主要為大家詳細介紹了Java如何調(diào)用opencv實現(xiàn)圖片矯正功能,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下2023-09-09關(guān)于訪問后端接口報404錯誤問題的解決方法(全網(wǎng)最細!)
404頁面的出現(xiàn)會降低用戶體驗,那么導致404頁面出現(xiàn)的原因是什么呢?這篇文章主要給大家介紹了關(guān)于訪問后端接口報404錯誤問題的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-04-04IDEA中Maven依賴包無法下載或?qū)氲慕鉀Q方案(系統(tǒng)缺失文件導致)
在配置Maven環(huán)境時,可能會遇到各種報錯問題,首先確保Maven路徑配置正確,例如使用apache-maven-3.5.0版本,則需要在系統(tǒng)環(huán)境變量的Path中添加其bin目錄路徑,并上移優(yōu)先級,接下來,在Maven的conf目錄下修改settings.xml文件,將鏡像源改為阿里云2024-09-09