欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring MessageSource獲取消息不符合預期的問題解決方案

 更新時間:2024年01月31日 08:37:58   作者:基督山伯爵_Neo  
最近我參與的產品要做國際化支持,選擇了用Spring MessageSource來實現,這個Spring 框架提供的工具使用很簡單,網上有各種教程文章,這里不做贅述,只說一個實際遇到的問題及解決方案,需要的朋友可以參考下

場景

  • 項目需要支持中、英文,所以在 spring boot 項目 resources 目錄下創(chuàng)建兩個消息配置文件 messages.propertiesmessages_en.properties 分別對應中文和英文消息。
  • 項目中使用以下代碼獲取對應語種的消息(通過code)
@Component
@RequiredArgsConstructor
public class LocalizationUtils {

    private final MessageSource messageSource;

    public String getLocalizedMessageFromCode(String code) {
        // 語種信息由請求通過請求頭攜帶,例如英文為en_us
        final Locale locale = new Locale(language);
        return messageSource.getMessage(code, null, locale);
    }

}
  • 項目打包為docker鏡像,部署到了K8S集群上,關鍵信息是:構建docker鏡像的基礎鏡像的默認語言是英文。

問題

當瀏覽器請求接口,攜帶請求頭信息為zh(期望獲取中文消息時),通過上面的工具類方法始終獲取到的是英文消息,不符合預期!

Spring 的 MessageSource 的工作方式

MessageSource在查找消息時,會首先嘗試使用與當前Locale完全匹配的消息文件。如果沒有找到完全匹配的文件,它會逐步回退到更通用的語言設置,最后回退到默認的messages.properties文件。

  • 我創(chuàng)建了一個新的Locale對象,其語言設置為zh。然而,我的項目中沒有一個名為messages_zh.properties的文件,那么MessageSource將無法找到與zh完全匹配的消息文件。在這種情況下,它會回退到默認的messages.properties文件。
  • 我的產品構建成docker鏡像,實際運行在docker中,構建docker鏡像的基礎鏡像的默認語言設置是英文。MessageSource在回退到默認消息文件之前,會嘗試使用與操作系統(tǒng)語言設置匹配的消息文件。 在我的項目中對應的就是 messages_en.properties
  • 最后才會根據默認消息配置文件messages.properties返回消息。
  • 另外,new Locale(language)方法創(chuàng)建Locale時,參數language大小寫 會影響結果,所以最好把language參數轉換成小寫,然后調用該方法。

解決辦法

  • Dockerfile 中添加行設置默認語言為中文,根據上面提到的機制,先找完全匹配的messages_zh.properties,然后嘗試使用與操作系統(tǒng)語言設置匹配的消息文件messages_zh.properties,因為這個消息文件不存在,所以使用messages.properties。
ENV LANG zh_CN.UTF-8
  • 設置應用程序的默認語言為中文,在啟動類中添加一行代碼
@SpringBootApplication
public class AppApplication {

    public static void main(String[] args) {
        // 設置默認語言為中文
        Locale.setDefault(new Locale("zh"));
        SpringApplication.run(AppApplication.class, args);
    }

}
  • 在resources目錄下新建messages_zh.properties消息文件。

附錄

Locale對象在Java中用于表示特定的地理、政治或文化區(qū)域。在創(chuàng)建Locale對象時,我們通常會傳入一個語言代碼,這個代碼通常是一個ISO 639 alpha-2alpha-3語言代碼。 以下是一些常見的語言代碼和對應的語言:

  • "en" - 英語
  • "zh" - 中文
  • "fr" - 法語
  • "de" - 德語
  • "ja" - 日語
  • "ko" - 韓語
  • "ru" - 俄語
  • "es" - 西班牙語

到此這篇關于Spring MessageSource獲取消息不符合預期的問題解決方案的文章就介紹到這了,更多相關Spring MessageSource消息不符預期內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中的?HTTP?協(xié)議原理詳解

    Java中的?HTTP?協(xié)議原理詳解

    這篇文章主要介紹了Java中的?HTTP?協(xié)議原理詳解,HTTP超文本傳輸協(xié)議,下文簡稱?HTTP,它的作用是用于實現服務器端和客戶端的數據傳輸的
    2022-07-07
  • java中多線程加鎖的四種方式

    java中多線程加鎖的四種方式

    Java中實現多線程安全的關鍵是加鎖,主要方式有synchronized關鍵字、ReentrantLock類、ReadWriteLock接口和Semaphore類,本文就來介紹一下這四種方式,感興趣的可以了解一下
    2024-10-10
  • Java開發(fā)常見錯誤之數值計算精度和舍入問題詳析

    Java開發(fā)常見錯誤之數值計算精度和舍入問題詳析

    除了使用Double保存浮點數可能帶來精度問題外,更匪夷所思的是這種精度問題,下面這篇文章主要給大家介紹了關于Java開發(fā)常見錯誤之數值計算精度和舍入問題的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • SpringBoot利用jpa連接MySQL數據庫的方法

    SpringBoot利用jpa連接MySQL數據庫的方法

    這篇文章主要介紹了SpringBoot利用jpa連接MySQL數據庫的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Java?Http請求方式之RestTemplate常用方法詳解

    Java?Http請求方式之RestTemplate常用方法詳解

    這篇文章主要為大家介紹了Java?Http請求方式之RestTemplate常用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • MyBatisPuls多數據源操作數據源偶爾報錯問題

    MyBatisPuls多數據源操作數據源偶爾報錯問題

    這篇文章主要介紹了MyBatisPuls多數據源操作數據源偶爾報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java源碼深度分析String與StringBuffer及StringBuilder詳解

    Java源碼深度分析String與StringBuffer及StringBuilder詳解

    當對字符串進行修改的時候,需要使用?StringBuffer?和?StringBuilder類,和String類不同的是,StringBuffer和?StringBuilder類的對象能夠被多次的修改,并且不產生新的未使用對象,本篇我們來分析分析它們的源碼
    2022-05-05
  • 詳解Java-Jackson使用

    詳解Java-Jackson使用

    這篇文章主要介紹了Java-Jackson使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • SpringBoot整合easy-es的詳細過程

    SpringBoot整合easy-es的詳細過程

    本文介紹了EasyES,一個基于Elasticsearch的ORM框架,旨在簡化開發(fā)流程并提高效率,EasyES支持SpringBoot框架,并提供了CRUD操作、批量操作和查詢操作等方法,文章還列舉了使用EasyES時可能遇到的技術難題及解決方法,感興趣的朋友一起看看吧
    2025-02-02
  • Java this關鍵字的使用詳解

    Java this關鍵字的使用詳解

    this 關鍵字是 Java 常用的關鍵字,可用于任何實例方法內指向當前對象,也可指向對其調用當前方法的對象,或者在需要當前類型對象引用時使用
    2021-11-11

最新評論