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

JAVA?Springboot配置i18n國際化語言詳細(xì)步驟

 更新時間:2024年08月19日 10:04:51   作者:cccl.  
國際化(Internationalization,縮寫為i18n)是指根據(jù)來展示不同的內(nèi)容,使應(yīng)用程序能夠適應(yīng)不同的語言和文化習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于JAVA?Springboot配置i18n國際化語言的詳細(xì)步驟,需要的朋友可以參考下

一、簡介

在Java中,國際化(Internationalization,通常簡稱為i18n)是一個過程,它允許應(yīng)用程序適應(yīng)不同的語言和地區(qū)設(shè)置,從而能夠支持全球用戶。Java平臺為國際化提供了強(qiáng)大的支持,包括Locale類、ResourceBundle類以及用于格式化日期、數(shù)字和貨幣的類。

二、功能

1.支持多語言:

應(yīng)用程序可以顯示多種語言的文本,包括但不限于英文、中文、法文等。
通過使用ResourceBundle,可以為每種語言提供獨立的資源文件(通常是.properties文件),其中包含該語言的文本。

2.自動選擇語言:

Java的Locale類允許應(yīng)用程序根據(jù)用戶的偏好或系統(tǒng)設(shè)置自動選擇適當(dāng)?shù)恼Z言。
例如,如果用戶的操作系統(tǒng)設(shè)置為法語,那么應(yīng)用程序?qū)L試加載法語的資源文件。格式化日期、數(shù)字和貨幣

3.用戶手動切換語言:

應(yīng)用程序通常還允許用戶手動切換語言,即使他們的系統(tǒng)設(shè)置或瀏覽器默認(rèn)語言不是他們想要使用的語言。這可以通過在應(yīng)用程序中提供語言選擇界面或設(shè)置選項來實現(xiàn)。

4.前后端文字、校驗、消息提醒的國際化:

國際化不僅限于用戶界面上的文本,還包括后端代碼中的字符串、錯誤消息、驗證提示等。
通過使用外部化的字符串和消息,可以確保整個應(yīng)用程序的文本都是可翻譯的。

5.通過AOP切面實現(xiàn)多語言的配置:

這是一個高級特性,允許開發(fā)人員使用面向切面編程(AOP)來自動處理對象的字符串屬性,并根據(jù)配置文件中的語言設(shè)置進(jìn)行替換。

這種方法可以確保即使在復(fù)雜的業(yè)務(wù)邏輯中,字符串也能被正確地翻譯成用戶所需的語言。

配置文件命名規(guī)則:

在Java國際化中,配置文件必須遵循特定的命名規(guī)則,以便Java能夠正確識別。

例如,一個名為“messages”的資源束文件可以有以下命名的資源文件:messages.properties(默認(rèn))、messages_en_US.properties(英語(美國))、messages_fr_FR.properties(法語(法國))等。

三、Java配置國際化步驟

3.1 創(chuàng)建資源文件夾

在src/main/resources目錄下新建一個文件夾,用于存放國際化配置文件。

例如,您可以創(chuàng)建一個名為i18n或messages的文件夾。

3.2 添加語言文件

3.2.1 選擇Resource Bundle 進(jìn)行添加配置文件

3.2.2 配置要添加的語言配置文件

在i18n或messages文件夾下,為每個要支持的語言和地區(qū)添加.properties文件。文件名的命名規(guī)則通常是basename_language_country.properties,其中basename是您的基本文件名(如messages),language是ISO 639語言代碼(如en代表英語),country是ISO 3166國家代碼(如US代表美國)。

例如:

messages_en_US.properties(美國英語)
messages_en_GB.properties(英國英語)
messages_zh_CN.properties(簡體中文)
messages_zh_TW.properties(繁體中文,臺灣)

(會有一個Default locale默認(rèn)的語言配置文件)

3.2.3、 在對應(yīng)的配置文件添加對應(yīng)的語言信息

1.zh_CN:(中文)

sys.config.newParameters=新增參數(shù)
sys.config.changeParameters=修改參數(shù)
sys.config.newParametersExists=失敗,參數(shù)鍵名已存在

2.en_US:(英文)

sys.config.newParameters=New parameters
sys.config.changeParameters=Modify parameters
sys.config.newParametersExists=Failed, parameter key name already exists

四、Java國際化配置工具類

4.1、創(chuàng)建MessageUtils工具類

MessageUtils 工具類在國際化(i18n)應(yīng)用中扮演著非常重要的角色,它封裝了與消息資源相關(guān)的常用操作,使得在應(yīng)用程序的不同部分中都能夠方便地獲取和格式化本地化消息,而無需重復(fù)編寫代碼,通過key來獲取目前系統(tǒng)語言的value值。

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;

/**
 * 獲取i18n資源文件
 *
 * @author cccl
 */
public class MessageUtils {
    /**
     * 根據(jù)消息鍵和參數(shù) 獲取消息 委托給spring messageSource
     *
     * @param code 消息鍵
     * @param args 參數(shù)
     * @return 獲取國際化翻譯值
     */
    public static String message(String code, Object... args) {
        MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}

4.2、添加國際化(i18n配置類)

import lombok.extern.slf4j.Slf4j; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.InterceptorRegistration; 
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**  
 * 國際化(i18n)配置類  
 */  
@Configuration   
@Slf4j 
// 實現(xiàn)WebMvcConfigurer接口,用于自定義Spring MVC的配置  
public class I18nConfig implements WebMvcConfigurer { 
  
    /**  
     * 添加攔截器到Spring MVC的攔截器鏈中  
     *  
     * @param registry 攔截器注冊器,用于添加和配置攔截器  
     */  
    @Override  
    public void addInterceptors(InterceptorRegistry registry) {  
        // 創(chuàng)建一個自定義的國際化攔截器實例  
        MyI18nInterceptor myHandlerInterceptor = new MyI18nInterceptor();  
        // 使用攔截器注冊器注冊自定義的國際化攔截器  
        InterceptorRegistration loginRegistry = registry.addInterceptor(myHandlerInterceptor);  
        // 設(shè)置需要攔截的路徑模式,這里配置為攔截所有路徑("/**")  
        loginRegistry.addPathPatterns("/**");  
    }  
}

4.3、添加國際化(i18n攔截器)

import com.github.pagehelper.util.StringUtil;
import lombok.extern.slf4j.Slf4j;  
import org.springframework.context.i18n.LocaleContextHolder;  
import org.springframework.web.servlet.HandlerInterceptor;  
import org.springframework.web.servlet.ModelAndView;  
  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import java.util.Locale;  
  
/**  
 * i18n攔截器:用于從HTTP請求頭中獲取國際化參數(shù),并設(shè)置當(dāng)前線程的Locale。  
 */  
@Slf4j  
public class MyI18nInterceptor implements HandlerInterceptor {  
  
    /**  
     * 在請求處理之前進(jìn)行調(diào)用。  
     *  
     * @param request  HttpServletRequest對象,提供對客戶端請求信息的訪問  
     * @param response HttpServletResponse對象,提供對HTTP響應(yīng)的控制  
     * @param handler  被調(diào)用的處理器,通常是HandlerMethod  
     * @return 如果返回false,則請求處理流程將被中斷并返回給客戶端;如果返回true,則繼續(xù)執(zhí)行后續(xù)流程  
     * @throws Exception 拋出異常將中斷請求處理流程  
     */  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        // 假設(shè)請求頭中存儲語言信息的鍵名為"Language"  
        final String key = "Language"; 
        // 從請求頭中獲取語言信息  
        String language = request.getHeader(key); 
         // 使用自定義的字符串工具類判斷語言信息是否非空  
        if (JoventStringUtils.isNotEmpty(language)) {
            // 假設(shè)語言信息格式為"zh_CN"或"en_US",這里通過下劃線分割獲取語言和地區(qū)信息  
            String[] languageParts = language.split("_");  
            // 確保分割后有兩個部分  
            if (languageParts.length == 2) { 
                // 創(chuàng)建Locale對象  
                Locale locale = new Locale(languageParts[0], languageParts[1]); 
                // 設(shè)置當(dāng)前線程的Locale  
                LocaleContextHolder.setLocale(locale); 
            } else {  
                // 如果格式不正確,可以記錄日志或進(jìn)行其他處理  
                log.warn("Invalid language format: {}", language);  
            }  
        }  
        // 繼續(xù)執(zhí)行后續(xù)流程 
        return true;  
    }  
  
    /**  
     * 在請求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)  
     * 通常用于處理一些需要在請求處理之后、視圖渲染之前執(zhí)行的邏輯  
     *  
     * @param request   HttpServletRequest對象  
     * @param response  HttpServletResponse對象  
     * @param handler   被調(diào)用的處理器  
     * @param modelAndView 如果處理器方法的返回值是ModelAndView類型,則為該方法的返回值,否則為null  
     */  
    @Override  
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {  
        // 可以在這里添加處理請求處理之后、視圖渲染之前的邏輯  
    }  
  
    /**  
     * 在整個請求結(jié)束之后被調(diào)用,也就是在DispatcherServlet渲染了對應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)  
     *  
     * @param request   HttpServletRequest對象  
     * @param response  HttpServletResponse對象  
     * @param handler   被調(diào)用的處理器  
     * @param ex        如果在請求處理過程中發(fā)生異常,則為該異常,否則為null  
     */  
    @Override  
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {  
        // 可以在這里添加請求處理完畢后的清理邏輯,例如關(guān)閉資源等  
    }  
}

五、Spring Boot配置

spring:  
  # 資源信息配置  
  messages:  
    # 國際化資源文件的基礎(chǔ)名稱(不包含文件后綴),Spring將會在這個基礎(chǔ)上添加語言代碼和地區(qū)代碼(例如messages_zh_CN.properties)來查找具體的資源文件  
    basename: i18n/messages # 國際化資源文件路徑  
  
    # 當(dāng)找不到特定Locale的資源文件時,是否回退到系統(tǒng)默認(rèn)的Locale。如果設(shè)置為true,并且找不到特定Locale的資源文件,Spring將嘗試使用系統(tǒng)默認(rèn)的Locale來加載資源文件  
    fallback-to-system-locale: true # 回退到系統(tǒng)Locale  
  
    # 指定資源文件的編碼格式。在讀取資源文件時,Spring將使用此編碼格式  
    encoding: UTF-8 # 編碼格式  
  
    # 國際化資源文件的緩存時間(以秒為單位)。在這段時間內(nèi),相同的資源請求將不會再次加載資源文件,而是從緩存中獲取。設(shè)置為-1將禁用緩存  
    cache-duration: 3600 # 緩存持續(xù)時間(秒)

六、測試

6.1、接口

@Log(title = "參數(shù)管理", businessType = BusinessType.INSERT)
@GetMapping("/add")
public AjaxResult add() {
    return AjaxResult.success(MessageUtils.message("sys.config.newParameters"));
}

此處截取的是請求頭的Language參數(shù),那么我們在請求的時候添加一個Language參數(shù) (具體的截取字段名自行配置)

6.2 、英文請求(en_US)

6.3 、中文請求(zh_CN)

總結(jié)  

到此這篇關(guān)于JAVA Springboot配置i18n國際化語言的文章就介紹到這了,更多相關(guān)Springboot配置i18n國際化語言內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java雙重檢查鎖定的實現(xiàn)代碼

    java雙重檢查鎖定的實現(xiàn)代碼

    這篇文章主要介紹了java雙重檢查鎖定的實現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • MybatisPlus如何自定義TypeHandler映射JSON類型為List

    MybatisPlus如何自定義TypeHandler映射JSON類型為List

    這篇文章主要介紹了MybatisPlus如何自定義TypeHandler映射JSON類型為List,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java入門概念個人理解之package與import淺析

    java入門概念個人理解之package與import淺析

    下面小編就為大家?guī)硪黄猨ava入門概念個人理解之package與import淺析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • springboot2.x實現(xiàn)oauth2授權(quán)碼登陸的方法

    springboot2.x實現(xiàn)oauth2授權(quán)碼登陸的方法

    這篇文章主要介紹了springboot2.x實現(xiàn)oauth2授權(quán)碼登陸的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • MyBatis利用MyCat實現(xiàn)多租戶的簡單思路分享

    MyBatis利用MyCat實現(xiàn)多租戶的簡單思路分享

    這篇文章主要給大家介紹了關(guān)于MyBatis利用MyCat實現(xiàn)多租戶的簡單思路的相關(guān)資料,文中的多租戶是基于多數(shù)據(jù)庫進(jìn)行實現(xiàn)的,數(shù)據(jù)是通過不同數(shù)據(jù)庫進(jìn)行隔離,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • Java實現(xiàn)各種文件類型轉(zhuǎn)換方式(收藏)

    Java實現(xiàn)各種文件類型轉(zhuǎn)換方式(收藏)

    這篇文章主要介紹了Java?各種文件類型轉(zhuǎn)換的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 解決idea中yml文件不識別的問題

    解決idea中yml文件不識別的問題

    這篇文章主要介紹了解決idea中yml文件不識別的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 淺談java獲取UUID與UUID的校驗

    淺談java獲取UUID與UUID的校驗

    這篇文章主要介紹了java獲取UUID與UUID的校驗,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • mybatis group by substr函數(shù)傳參報錯的解決

    mybatis group by substr函數(shù)傳參報錯的解決

    這篇文章主要介紹了mybatis group by substr函數(shù)傳參報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 解決Servlet4.0版本使用注解設(shè)置url但無法訪問的問題

    解決Servlet4.0版本使用注解設(shè)置url但無法訪問的問題

    在學(xué)習(xí)servlet過程中,使用web.xml文件配置servlet可以正常訪問,但使用WebServlet注解時出現(xiàn)404錯誤,解決方法是在web.xml文件中將metadata-complete屬性改為false,啟動標(biāo)注支持,然而該方法對我無效,最后通過重建項目和手動將新建的項目添加到tomcat服務(wù)器解決問題
    2024-10-10

最新評論

双辽市| 永兴县| 长泰县| 乌拉特中旗| 方城县| 原平市| 永兴县| 惠东县| 桂阳县| 威海市| 兰考县| 永州市| 兖州市| 泸西县| 宜城市| 长治县| 营山县| 三河市| 九台市| 郯城县| 普格县| 杂多县| 边坝县| 尖扎县| 博湖县| 郑州市| 湛江市| 三亚市| 青河县| 县级市| 呼图壁县| 文成县| 浏阳市| 哈尔滨市| 寻乌县| 上高县| 九台市| 翁源县| 宣化县| 乐安县| 恭城|