中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot REST國際化的實現代碼

發布時間:2020-09-10 09:19:10 來源:腳本之家 閱讀:166 作者:banq 欄目:編程語言

本指南將向您展示如何輕松只需幾個簡單的步驟即可實現Spring Boot應用的國際化,從而總是在一個地方處理語言環境問題。

我們將討論如何在現有的Spring Boot項目中添加國際化。當您處理應該為來自不同國家/地區的用戶提供不同語言服務的項目時,app國際化的問題變得很常見。比如,你需要向中國用戶提供中文回復信息,并向法國用戶提供法語信息,那么讓我們來看看如何在Spring Boot中實現它。

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

下載項目后,解壓縮,并用打開IntelliJ IDEA打開。

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

@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個語言環境:en和fr。在名為“ Accept-Language ” 的http的Header中傳遞語言環境。因此,如果Header存在這個變量名且它不為空,我們將使用它的語言環境,否則 - 我們將使用默認語言環境,即en。

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

@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(...)接受入參“msg”。但這并不是應該翻譯的信息,它只是信息代碼。現在我們還沒有任何信息代碼定義,所以現在定義信息代碼。

在resources文件夾下,創建兩個文件:messages.properties和messages_fr.properties。

這是messages.properties的內容:

hello=Hello World!

welcome=Welcome to this guide!

這里是messages_fr.properties的內容:

hello=Bonjour le Monde!

welcome=Bienvenue dans ce guide!

在這里我們已經定義了我們的消息代碼。他們是“ hellp ”和“ welcome ”。現在你可以指導我們應該將哪些代碼傳遞給toLocale(String msgCode)方法,這樣才能根據用戶的語言環境獲取適當的消息。

可能最后一步是創建簡單的控制器,讓我們將它命名為MainController,它只有一個端點,它將接受消息代碼,我們將其作為請求參數傳遞給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) ;
}
}

現在已經完成!

使用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類。

源碼: GitHub

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芮城县| 壶关县| 林口县| 吉林省| 平南县| 喀喇| 手机| 民和| 东阿县| 巫溪县| 涪陵区| 桂东县| 宁陵县| 平山县| 南江县| 迁西县| 高碑店市| 上蔡县| 曲靖市| 兴城市| 高陵县| 石景山区| 井冈山市| 同仁县| 拉萨市| 英超| 永德县| 连州市| 易门县| 浏阳市| 枣庄市| 东丽区| 高州市| 尤溪县| 高阳县| 云安县| 综艺| 芦山县| 扎兰屯市| 玉树县| 潜山县|