1. 程式人生 > >Spring Boot REST國際化

Spring Boot REST國際化

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

我們將討論如何在現有的Spring Boot專案中新增國際化。當您處理應該為來自不同國家/地區的使用者提供不同語言服務的專案時,app國際化的問題變得很常見。比如,你需要向中國使用者提供中文回覆資訊,並向法國使用者提供法語資訊,那麼讓我們來看看如何在Spring Boot中實現它。

讓我們使用Spring Initializer建立專案 ,這使得專案的建立更容易。選擇Web,Security,JPA,Actuator,Devtools等模組。

下載專案後,解壓縮,並用IDE開啟。

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


@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,它將有一個單獨的方法,它將接受應翻譯的資訊程式碼。

@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。

這是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類。