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

SpringBoot實(shí)現(xiàn)國際化(多語言)配置的詳細(xì)步驟

 更新時間:2025年09月05日 10:28:36   作者:齊 飛  
SpringBoot 國際化配置是實(shí)現(xiàn)應(yīng)用程序支持多語言的功能,這對于全球化的網(wǎng)站和應(yīng)用來說至關(guān)重要,SpringBoot 提供了簡潔的機(jī)制來實(shí)現(xiàn)這一目標(biāo),本文通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下

核心原理

SpringBoot國際化的核心是 MessageSource 接口,其默認(rèn)實(shí)現(xiàn)是 ResourceBundleMessageSource。它會根據(jù)當(dāng)前用戶的區(qū)域(Locale)信息,從配置的資源文件(.properties 文件)中加載對應(yīng)的文本信息。

整個過程可以分解為:

  1. 識別區(qū)域(Locale): 通過攔截器解析請求,獲取用戶的語言環(huán)境(如從請求頭、會話、參數(shù)等)。
  2. 加載資源: 根據(jù)識別到的 Locale,找到對應(yīng)的 .properties 文件。
  3. 獲取文本: 在代碼或模板中,通過唯一的消息鍵(key) 獲取對應(yīng)的本地化文本。

詳細(xì)實(shí)現(xiàn)步驟

1.在resources文件下新建i18n文件,并新建國際化資源文件

輸入messages,添加簡體中文、繁體中文、英文

出現(xiàn)以下文件,表示創(chuàng)建成功。

messages.properties文件中添加多語言信息

中文轉(zhuǎn)為UNICODE編碼,可以找一個在線 Unicode 編碼轉(zhuǎn)換

messages.properties

10001=\u7cfb\u7edf\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01
10002=\u8bf7\u52ff\u91cd\u590d\u63d0\u4ea4\uff01

messages_en_US.properties

10001=The system is busy, please try again later!
10002=Please do not resubmit!

messages_zh_CN.properties

10001=\u7cfb\u7edf\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\uff01
10002=\u8bf7\u52ff\u91cd\u590d\u63d0\u4ea4\uff01

messages_zh_TW.properties

10001=\u7cfb\u7d71\u7e41\u5fd9\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\uff01
10002=\u8acb\u52ff\u91cd\u8907\u63d0\u4ea4\uff01

2.相關(guān)配置

application.yml

spring:
  messages:
    basename: i18n/messages
    encoding: utf-8

國際化參數(shù)解析器

import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

/**
 * 國際化參數(shù)解析器
 *
 * @author qf
 * @date 2025-05-08 20:58:18
 */
public class HeaderLocalResolver implements LocaleResolver {
    private static final String ACCEPT_LANGUAGE = "lang";

    /**
     * 國際化參數(shù)解析方法
     */
    @Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        Locale locale = Locale.getDefault();
        String acceptLanguageHeader = httpServletRequest.getHeader(ACCEPT_LANGUAGE);
        if (StringUtils.isEmpty(acceptLanguageHeader)) {
            //前端未傳lang請求頭 默認(rèn)使用簡體中文
            String[] params = LanguageEnum.CN.getLang().split("-");
            return new Locale(params[0], params[1]);
        }
        String lang = acceptLanguageHeader.split(";")[0];
        String[] params = lang.split("-");
        if (params.length == 1) {
            return locale;
        }
        locale = new Locale(params[0], params[1]);
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    }
}
/**
 * 多語言枚舉
 * @author qf
 * @date 2025-05-08 20:58:18
 */
public enum LanguageEnum {
    // 簡體中文
    CN("zh-CN"),
    //繁體中文
    TW("zh-TW"),
    //英文
    US("en-US");

    private String lang;
    LanguageEnum(String lang) {
        this.lang = lang;
    }


    public String getLang(){
        return this.lang;
    }
}

國際化配置類

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;

/**
 * 國際化配置類
 * @author qf
 * @date 2025-05-08 20:58:18
 */
@Configuration
public class I18nConfig {
    @Value("${spring.messages.basename:i18n.messages}")
    private String baseName;
    @Value("${spring.messages.encoding:UTF-8}")
    private String encoding;

    /**
     * 注入文本解析
     */
    @Bean(name = "messageSource")
    public ResourceBundleMessageSource getMessageResource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename(baseName);
        messageSource.setDefaultEncoding(encoding);
        return messageSource;
    }

    /**
     * 注入自定義國際化解析器
     */
    @Bean(name = "localeResolver")
    public LocaleResolver localeResolver(){
        return new HeaderLocalResolver();
    }
}

測試效果

@RestController
@RequestMapping("api")
public class TestController {
    /**
     * 通過code拿多語言下的內(nèi)容
     * @param code
     * @return
     */
    @GetMapping("/test")
    public String test(String code) {
        String message = LanguageUtil.get(code);
        return message;
    }
}

請求頭中不添加lang

之前在HeaderLocalResolver.resolveLocale()中進(jìn)行了配置,默認(rèn)使用簡體中文

請求頭中添加lang

在請求頭中添加lang,value值傳需要的簡體中文、繁體中文或英文,即可進(jìn)行切換。

lang = en-US zh-TW zh-CN

以上就是SpringBoot實(shí)現(xiàn)國際化(多語言)配置的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot國際化(多語言)配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決SpringBoot使用devtools導(dǎo)致的類型轉(zhuǎn)換異常問題

    解決SpringBoot使用devtools導(dǎo)致的類型轉(zhuǎn)換異常問題

    這篇文章主要介紹了解決SpringBoot使用devtools導(dǎo)致的類型轉(zhuǎn)換異常問題,具有很好的參考價值,希望對大家有所幫助。 一起跟隨小編過來看看吧
    2020-08-08
  • Mybatis中的延遲加載案例解析

    Mybatis中的延遲加載案例解析

    這篇文章主要介紹了Mybatis中的延遲加載,場景結(jié)合案例分析非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • MyBatis如何通過xml方式實(shí)現(xiàn)SaveOrUpdate

    MyBatis如何通過xml方式實(shí)現(xiàn)SaveOrUpdate

    這篇文章主要講如何通過xml方式實(shí)現(xiàn)SaveOrUpdate,但是仍然建議在Service中實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-06-06
  • Java中5種輸出換行方式小結(jié)

    Java中5種輸出換行方式小結(jié)

    在Java中,輸出換行符是一項(xiàng)非?;镜牟僮?它在控制臺中輸出文本時非常常見,本文主要介紹了Java中5種輸出換行方式小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Java實(shí)現(xiàn)圖片上文字內(nèi)容的動態(tài)修改的操作步驟

    Java實(shí)現(xiàn)圖片上文字內(nèi)容的動態(tài)修改的操作步驟

    在數(shù)字圖像處理領(lǐng)域,Java提供了強(qiáng)大的庫來處理圖片,包括讀取、修改和寫入圖片,如果你需要在Java應(yīng)用程序中修改圖片上的文字內(nèi)容,可以通過圖像處理技術(shù)來實(shí)現(xiàn),這篇博文將介紹如何使用Java實(shí)現(xiàn)圖片上文字內(nèi)容的動態(tài)修改,需要的朋友可以參考下
    2024-07-07
  • Java列出2到100之間所有素數(shù)的方法

    Java列出2到100之間所有素數(shù)的方法

    這篇文章主要介紹了Java列出2到100之間所有素數(shù)的方法,涉及java數(shù)值運(yùn)算的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Spring Data JPA中的Specification動態(tài)查詢詳解

    Spring Data JPA中的Specification動態(tài)查詢詳解

    Specification是一個設(shè)計(jì)模式,用于企業(yè)級應(yīng)用開發(fā)中,其主要目的是將業(yè)務(wù)規(guī)則從業(yè)務(wù)邏輯中分離出來,在數(shù)據(jù)查詢方面,Specification可以定義復(fù)雜的查詢,使其更易于重用和測試,這篇文章主要介紹了Spring Data JPA中的Specification動態(tài)查詢詳解,需要的朋友可以參考下
    2023-07-07
  • Java深入理解代碼塊的使用細(xì)節(jié)

    Java深入理解代碼塊的使用細(xì)節(jié)

    所謂代碼塊是指用"{}"括起來的一段代碼,根據(jù)其位置和聲明的不同,可以分為普通代碼塊、構(gòu)造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上?synchronized關(guān)鍵字,則此代碼塊就成為同步代碼塊
    2022-05-05
  • Java cglib動態(tài)代理原理分析

    Java cglib動態(tài)代理原理分析

    這篇文章主要介紹了Java cglib動態(tài)代理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-05-05
  • SpringSecurity Oauth2訪問令牌續(xù)期問題

    SpringSecurity Oauth2訪問令牌續(xù)期問題

    這篇文章主要介紹了SpringSecurity Oauth2訪問令牌續(xù)期問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評論

潮安县| 巢湖市| 宁晋县| 灵宝市| 龙陵县| 报价| 岱山县| 化隆| 安宁市| 云霄县| 荣成市| 沙河市| 云阳县| 湟源县| 奎屯市| 满城县| 灵宝市| 海晏县| 余江县| 平阴县| 赣榆县| 肥城市| 闸北区| 乐陵市| 铜川市| 大庆市| 鸡西市| 光山县| 米林县| 儋州市| 页游| 威宁| 石阡县| 天全县| 孟州市| 桐柏县| 正镶白旗| 汤原县| 博罗县| 吐鲁番市| 元阳县|