Spring Boot REST國際化

本指南將向您展現如何輕鬆只需幾個簡單的步驟便可實現Spring Boot應用的國際化java

咱們將討論如何在現有的Spring Boot項目中添加國際化。當您處理應該爲來自不一樣國家/地區的用戶提供不一樣語言服務的項目時,app國際化的問題變得很常見。好比,你須要向中國用戶提供中文回覆信息,並向法國用戶提供法語信息,那麼讓咱們來看看如何在Spring Boot中實現它。面試

讓咱們使用Spring Initializer建立項目 ,這使得項目的建立更容易。選擇Web,Security,JPA,Actuator,Devtools等模塊。api

下載項目後,解壓縮,並用IDE打開。架構

第一件事是建立CustomLocaleResolver類,它將負責定義用戶的語言環境。app

@Configuration
public

class

CustomLocaleResolver

 extends 
AcceptHeaderLocaleResolver

 implements 
WebMvcConfigurer
 {

List
<
Locale
> LOCALES = 
Arrays
.asList(

new

Locale
(
"en"
),

new

Locale
(
"fr"
));

@Override

public

Locale
 resolveLocale(
HttpServletRequest
 request) {

String
 headerLang = request.getHeader(
"Accept-Language"
);

return
 headerLang == 
null
 || headerLang.isEmpty()
 ? 
Locale
.getDefault()
 : 
Locale
.lookup(
Locale
.
LanguageRange
.parse(headerLang), LOCALES);
 }

@Bean

public

ResourceBundleMessageSource
 messageSource() {

ResourceBundleMessageSource
 rs = 
new

ResourceBundleMessageSource
();
 rs.setBasename(
"messages"
);
 rs.setDefaultEncoding(
"UTF-8"
);
 rs.setUseCodeAsDefaultMessage(
true
);

return
 rs;
 }
}

這裏告訴咱們項目中支持2個語言環境:en和fr。在名爲「 Accept-Language 」 的http的Header中傳遞語言環境。所以,若是Header存在這個變量名且它不爲空,咱們將使用它的語言環境,不然 - 咱們將使用默認語言環境,即en。框架

接下來讓咱們建立一個類,負責根據指定的語言環境選擇正確的語言信息。我將其稱爲Translator,它將有一個單獨的方法,它將接受應翻譯的信息代碼。curl

@Component
public

class

Translator

{

private

static

ResourceBundleMessageSource
 messageSource
;

@Autowired

Translator
(
ResourceBundleMessageSource
 messageSource
)

{

Translator
.
messageSource 
=
 messageSource
;

}

public

static

String
 toLocale
(
String
 msgCode
)

{

Locale
 locale 
=

LocaleContextHolder
.
getLocale
();

return
 messageSource
.
getMessage
(
msg
,

null
,
 locale
);

}
}

messageSource.getMessage(...)接受入參「msg」。但這並非應該翻譯的信息,它只是信息代碼。如今咱們尚未任何信息代碼定義,因此如今定義信息代碼。分佈式

在resources文件夾下,建立兩個文件:messages.properties和messages_fr.prop``erties。ide

這是messages.properties的內容:源碼分析

hello
=
Hello

World
!
welcome
=
Welcome
 to 
this
 guide
!
這裏是messages_fr.properties的內容:

hello
=
Bonjour
 le 
Monde
!
welcome
=
Bienvenue
 dans ce guide
!

在這裏咱們已經定義了咱們的消息代碼。他們是「 hello 」和「 welcome 」。如今你能夠指導咱們應該將哪些代碼傳遞給toLocale(String msgCode)方法,這樣才能根據用戶的語言環境獲取適當的消息。

可能最後一步是建立簡單的控制器,讓咱們將它命名爲MainController,它只有一個端點,它將接受消息代碼,咱們將其做爲請求參數傳遞給HTTP請求。

@RestController
@RequestMapping
(
value 
=「/
 api
」)
public

class

MainController

{
@GetMapping
()
public

String
 getMessage
(
@RequestParam
(「
msg
」)
String
 msg
){
return

Translator
。
toLocale
(
msg
)

;
}
}

如今已經完成!

使用CURL發出簡單的請求:

curl 
-
X GET 
-
H 
"Accept-Language: fr"

'http://localhost:8080/api?msg-welcome'

這個將返回法語的welcome信息:

Bienvenue
 dans ce guide
!

再發出請求:

curl 
-
X GET 
-
H 
"Accept-Language: en"

'http://localhost:8080/api?msg-welcome'

這個將返回英語的welcome信息:

welcome to 
this
 guide
!

正如你看到:響應會根據請求中傳遞的「 Accept-Language 」標頭的值而有所不一樣。這樣,咱們不須要檢查每一個控制器方法中請求中傳遞的內容,而後將其進一步傳遞給服務層。咱們如今能夠在一個單獨的地方執行此操做,即CustomLocaleResolver類。

加Java架構師進階羣獲取Java工程化、高性能及分佈式、高性能、深刻淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的直播免費學習權限 都是大牛帶飛 讓你少走不少的彎路的 羣.號是:855801563對了 小白勿進 最好是有開發經驗

注:加羣要求

一、具備工做經驗的,面對目前流行的技術不知從何下手,須要突破技術瓶頸的能夠加。

二、在公司待久了,過得很安逸,但跳槽時面試碰壁。須要在短期內進修、跳槽拿高薪的能夠加。

三、若是沒有工做經驗,但基礎很是紮實,對java工做機制,經常使用設計思想,經常使用java開發框架掌握熟練的,能夠加。

四、以爲本身很牛B,通常需求都能搞定。可是所學的知識點沒有系統化,很難在技術領域繼續突破的能夠加。

5.阿里Java高級大牛直播講解知識點,分享知識,多年工做經驗的梳理和總結,帶着你們全面、科學地創建本身的技術體系和技術認知!

相關文章
相關標籤/搜索