最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring項目實現(xiàn)國際化流程解析

 更新時間:2026年01月22日 08:45:32   作者:makowin  
SpringBoot實現(xiàn)國際化(i18n)的步驟包括創(chuàng)建國際化資源文件、配置application.yml、自定義LocaleResolver和LocaleChangeInterceptor、在代碼中使用MessageSource獲取國際化消息,本文介紹spring項目實現(xiàn)國際化流程,感興趣的朋友一起看看吧

在 Spring Boot 項目已經開發(fā)完成后,想要實現(xiàn)國際化(i18n),讓所有提示信息(后端返回的錯誤消息、成功消息、異常信息、枚舉描述等)支持多語言,處理流程如下:

1. 創(chuàng)建國際化資源文件(messages.properties)

在 src/main/resources 目錄下(新建 i18n 子目錄),創(chuàng)建以下文件:

 src/main/resources/
 └── i18n/
     ├── messages.properties           # 默認語言(通常是中文或英文)
     ├── messages_zh_CN.properties     # 簡體中文
     ├── messages_en_US.properties     # 美式英文
     ├── messages_zh_TW.properties     # 繁體中文(可選)
     └── messages_ja.properties        # 日語(可選)

messages.properties(中文示例):

 # 通用提示
 success=操作成功
 error.system=系統(tǒng)異常,請稍后重試
 error.notfound=資源不存在
 # 業(yè)務提示
 user.login.success=登錄成功
 user.login.fail=用戶名或密碼錯誤
 user.notfound=用戶不存在

messages_en_US.properties(英文示例):

 success=Operation successful
 error.system=System error, please try again later
 error.notfound=Resource not found
 user.login.success=Login successful
 user.login.fail=Username or password is incorrect
 user.notfound=User not found

注意

  • 文件名必須以 messages 開頭(Spring Boot 默認查找規(guī)則)。
  • 所有提示統(tǒng)一放在 i18n 目錄下,方便管理。

2. 配置 application.yml(或 application.properties)

 # application.yml
 spring:
   messages:
     basename: i18n/messages          # 資源文件基礎名(支持通配符)
     encoding: UTF-8                 # 必須是 UTF-8
     fallback-to-system-locale: false # 推薦設置為 false(找不到對應語言時不回退到系統(tǒng)默認Locale)
     use-code-as-default-message: true # 找不到key時直接返回code(調試方便,上線可改為false)
 #  properties
 spring.messages.basename=i18n/messages
 spring.messages.encoding=UTF-8
 spring.messages.fallback-to-system-locale=false
 spring.messages.use-code-as-default-message=true

3. 自定義 LocaleResolver 和 LocaleChangeInterceptor(支持前端傳參切換語言)

Spring Boot 默認使用 AcceptHeaderLocaleResolver(根據請求頭 Accept-Language 自動識別),生產環(huán)境通常還需要支持通過參數或 cookie 切換語言。

使用 SessionLocaleResolver + LocaleChangeInterceptor:

  @Configuration
  public class LocaleConfig implements WebMvcConfigurer {
      // 默認語言
      @Bean
      public LocaleResolver localeResolver() {
          SessionLocaleResolver localeResolver = new SessionLocaleResolver();
          localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); // 默認簡體中文
          return localeResolver;
     }
     // 攔截器:支持 ?lang=zh_CN 或 ?lang=en_US 切換語言
     @Bean
     public LocaleChangeInterceptor localeChangeInterceptor() {
         LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
         lci.setParamName("lang"); // 前端傳參名
         return lci;
     }
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(localeChangeInterceptor());
     }
 }

若優(yōu)先從請求頭識別,再支持參數切換,可以自定義 LocaleResolver(更靈活)。

4. 在代碼中使用 MessageSource 獲取國際化消息

方式一:注入 MessageSource

  @RestController
  @RequestMapping("/api")
  public class UserController {
      @Autowired
      private MessageSource messageSource;
      @GetMapping("/test")
      public ResponseEntity<String> test(Locale locale) { // Locale 可選從參數注入
         // 方式1:直接使用 locale 參數
         String msg = messageSource.getMessage("user.login.success", null, locale);
         // 方式2:從 LocaleContextHolder 獲取當前語言(推薦?。?
         String msg2 = messageSource.getMessage("user.login.success", null, LocaleContextHolder.getLocale());
         return ResponseEntity.ok(msg2);
     }
 }

方式二:統(tǒng)一封裝工具類

  @Component
  public class MessageUtils {
      private static MessageSource messageSource;
      @Autowired
      public void setMessageSource(MessageSource messageSource) {
          MessageUtils.messageSource = messageSource;
      }
     /**
      * 獲取國際化消息
      */
     public static String getMessage(String code, Object... args) {
         return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
     }
     public static String getMessage(String code) {
         return getMessage(code, (Object) null);
     }
 }

使用方式:

 throw new BusinessException(MessageUtils.getMessage("user.notfound"));
 // 或
 return Result.error(MessageUtils.getMessage("error.system"));

5. 全局異常處理中使用國際化

  @RestControllerAdvice
  public class GlobalExceptionHandler {
      @ExceptionHandler(BusinessException.class)
      public Result<?> handleBusinessException(BusinessException e) {
          // 假設 BusinessException 里面存了 messageCode
          String message = MessageUtils.getMessage(e.getCode(), e.getArgs());
          return Result.error(message);
      }
     @ExceptionHandler(Exception.class)
     public Result<?> handleException(Exception e) {
         return Result.error(MessageUtils.getMessage("error.system"));
     }
 }

6. 支持參數占位符

 # messages.properties
 user.age.limit=年齡必須在 {0} 到 {1} 歲之間
 String msg = MessageUtils.getMessage("user.age.limit", 18, 60);
 // 輸出:年齡必須在 18 到 60 歲之間

7. 常見最佳實踐總結

處理點處理方式
資源文件位置src/main/resources/i18n/messages_*.properties
默認語言簡體中文(Locale.SIMPLIFIED_CHINESE
語言切換方式請求頭 Accept-Language + ?lang=zh_CN
消息獲取方式優(yōu)先使用 LocaleContextHolder.getLocale()
工具類封裝 MessageUtils 統(tǒng)一獲取
異常消息全部使用 code + MessageUtils 獲取
找不到key建議 use-code-as-default-message=false
編碼必須 UTF-8

8. 測試方法

  • 瀏覽器開發(fā)者工具 → Network → 修改請求頭 Accept-Language: en-US,en;q=0.9
  • 或直接在 URL 后加 ?lang=en_US

完成以上步驟,你的 Spring Boot 項目就實現(xiàn)了標準的國際化支持,所有提示信息都可以根據用戶語言自動切換。

到此這篇關于spring項目國際化流程的文章就介紹到這了,更多相關spring項目國際化流程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java運行windows的cmd命令簡單代碼

    java運行windows的cmd命令簡單代碼

    這篇文章主要介紹了java運行windows的cmd命令簡單代碼,有需要的朋友可以參考一下
    2013-12-12
  • java.sql.SQLException問題解決以及注意事項

    java.sql.SQLException問題解決以及注意事項

    這篇文章主要給大家介紹了關于java.sql.SQLException問題解決以及注意事項的相關資料,這個問題其實很好解決,文中通過圖文將解決的辦法介紹的很詳細,需要的朋友可以參考下
    2023-07-07
  • 關于Spring MVC框架中攔截器Interceptor的使用解讀

    關于Spring MVC框架中攔截器Interceptor的使用解讀

    這篇文章主要介紹了關于Spring MVC框架中攔截器Interceptor的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 梳理總結Java?static關鍵字的方法作用

    梳理總結Java?static關鍵字的方法作用

    這篇文章主要介紹了梳理總結Java?static關鍵字的方法作用,?static?關鍵字可以用來修飾的成員變量和成員方法,被修飾的成員是屬于類的,而不是單單是屬于某個對象的
    2022-06-06
  • Java 操作Properties配置文件詳解

    Java 操作Properties配置文件詳解

    這篇文章主要介紹了Java 操作Properties配置文件詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java中的StringBuilder性能測試

    Java中的StringBuilder性能測試

    這篇文章主要介紹了Java中的StringBuilder性能測試,本文包含測試代碼和測試結果,最后得出結論,需要的朋友可以參考下
    2014-09-09
  • java redis 實現(xiàn)簡單的用戶簽到功能

    java redis 實現(xiàn)簡單的用戶簽到功能

    這篇文章主要介紹了java redis 實現(xiàn)簡單的用戶簽到功能,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • mybatis查詢語句揭秘之封裝數據

    mybatis查詢語句揭秘之封裝數據

    這篇文章主要給大家介紹了關于mybatis查詢語句揭秘之封裝數據的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Java在OJ時運行超時的問題解決方案

    Java在OJ時運行超時的問題解決方案

    Java語言什么都好,就是在OJ的時候真的是太慢了,今天來講解一種讓Java運行速度快速提高的方法,感興趣的朋友一起看看吧
    2023-11-11
  • 詳解Java線程池隊列中的延遲隊列DelayQueue

    詳解Java線程池隊列中的延遲隊列DelayQueue

    這篇文章主要為大家詳細介紹了Java線程池隊列中的延遲隊列DelayQueue的相關資料,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-12-12

最新評論

苏州市| 米林县| 石狮市| 沧州市| 延吉市| 临澧县| 云霄县| 峡江县| 黄山市| 尚义县| 宣武区| 山阴县| 游戏| 黔南| 佛山市| 通化县| 马尔康县| 大邑县| 原阳县| 天祝| 辰溪县| 灯塔市| 从江县| 赤壁市| 白水县| 射阳县| 嘉黎县| 栾城县| 永泰县| 张掖市| 根河市| 梁山县| 青川县| 抚松县| 尤溪县| 三台县| 嘉峪关市| 芜湖县| 嵩明县| 原平市| 南汇区|