【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的國際化:支持多語言的 RESTful API

??<前文回顧>

點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、開篇整活兒

今兒個咱嘮嘮 Spring Boot 里頭的國際化。這玩意兒吧,說大不大,說小不小,整好了是錦上添花,整不好就是火上澆油。你要是剛入門,那可得悠著點兒,別一上來就整得自己“翻車”了。

二、國際化是啥玩意兒?

國際化是系統開發里頭的一個核心問題,說白了就是讓系統支持多語言。Spring Boot 里頭默認就集成了國際化,用起來賊方便。

1. 國際化的核心概念

國際化里頭有幾個核心概念:LocaleMessageSourceResourceBundle

  • Locale:就是語言環境,比如說中文、英文啥的。
  • MessageSource:就是消息源,用來獲取多語言的消息。
  • ResourceBundle:就是資源包,用來存儲多語言的消息。

2. Spring Boot 的國際化支持

Spring Boot 里頭默認就集成了國際化支持,用起來賊方便。你只要在?application.properties?里頭配個國際化配置,然后在代碼里頭用?MessageSource?獲取多語言的消息就行了。

三、Spring Boot 集成國際化

Spring Boot 里頭集成國際化很簡單,只要加個配置,配個消息源就行了。

1. 添加配置

首先,你得在?application.properties?里頭加個國際化配置。

Properties Code

spring.messages.basename=messages

spring.messages.encoding=UTF-8

這段代碼里頭,spring.messages.basename?是消息源的基礎名稱,spring.messages.encoding?是消息源的編碼。

2. 添加消息源

然后,你得在?src/main/resources?目錄下加個消息源文件。

Properties Code

# messages.properties

greeting=Hello, World!

# messages_zh_CN.properties

greeting=你好,世界!

# messages_fr_FR.properties

greeting=Bonjour le monde!

這段代碼里頭,messages.properties?是默認的消息源文件,messages_zh_CN.properties?是中文的消息源文件,messages_fr_FR.properties?是法語的消息源文件。

3. 使用 MessageSource

最后,你可以在代碼里頭用?MessageSource?獲取多語言的消息。

Java Code

@Service

public class MyService {

????@Autowired

????private MessageSource messageSource;

????public String getGreeting(Locale locale) {

????????return messageSource.getMessage("greeting", null, locale);

????}

}

這段代碼里頭,getGreeting?方法用?MessageSource?獲取了多語言的消息。

四、Spring Boot 使用國際化實現多語言的 RESTful API

Spring Boot 里頭使用國際化實現多語言的 RESTful API 很簡單,只要加個配置,配個消息源就行了。

1. 添加配置

首先,你得在?application.properties?里頭加個國際化配置。

Properties Code

spring.messages.basename=messages

spring.messages.encoding=UTF-8

這段代碼里頭,spring.messages.basename?是消息源的基礎名稱,spring.messages.encoding?是消息源的編碼。

2. 添加消息源

然后,你得在?src/main/resources?目錄下加個消息源文件。

Properties Code

# messages.properties

greeting=Hello, World!

# messages_zh_CN.properties

greeting=你好,世界!

# messages_fr_FR.properties

greeting=Bonjour le monde!

這段代碼里頭,messages.properties?是默認的消息源文件,messages_zh_CN.properties?是中文的消息源文件,messages_fr_FR.properties?是法語的消息源文件。

3. 使用 LocaleResolver

最后,你可以在代碼里頭用?LocaleResolver?獲取多語言的消息。

Java Code

@Configuration

public class LocaleConfig {

????@Bean

????public LocaleResolver localeResolver() {

????????SessionLocaleResolver localeResolver = new SessionLocaleResolver();

????????localeResolver.setDefaultLocale(Locale.US);

????????return localeResolver;

????}

????@Bean

????public LocaleChangeInterceptor localeChangeInterceptor() {

????????LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();

????????localeChangeInterceptor.setParamName("lang");

????????return localeChangeInterceptor;

????}

????@Override

????public void addInterceptors(InterceptorRegistry registry) {

????????registry.addInterceptor(localeChangeInterceptor());

????}

}

這段代碼里頭,LocaleConfig?類配置了?LocaleResolver?和?LocaleChangeInterceptor,用來獲取多語言的消息。

五、Spring Boot 使用國際化的坑點

1. 消息源文件沒加

Spring Boot 里頭,消息源文件沒加,那國際化就不起作用了。你要是沒加,那可得好好檢查檢查。

2. 消息源編碼不對

Spring Boot 里頭,消息源編碼不對,那國際化就不起作用了。你要是沒配好,那可得好好檢查檢查。

3. LocaleResolver 沒配

Spring Boot 里頭,LocaleResolver?沒配,那國際化就不起作用了。你要是沒配好,那可得好好檢查檢查。

這段代碼里頭,LocaleConfig?類配置了?LocaleResolver?和?LocaleChangeInterceptor,用來獲取多語言的消息。

專有名詞解釋

  1. 國際化:系統開發里頭的一個核心問題,讓系統支持多語言。
  2. Locale:語言環境,比如說中文、英文啥的。
  3. MessageSource:消息源,用來獲取多語言的消息。
  4. ResourceBundle:資源包,用來存儲多語言的消息。
  5. LocaleResolver:Spring 里頭的一個接口,用來解析語言環境。
  6. LocaleChangeInterceptor:Spring 里頭的一個類,用來攔截語言環境的變化。
  7. SessionLocaleResolver:Spring 里頭的一個類,用來解析會話中的語言環境。

寫在最后

身為一個中古程序猿,我有很多自己想做的事情,比如埋頭苦干手搓一個低代碼數據庫設計平臺(目前只針對寫java的朋友),已經在找朋友內測了,比如很喜歡幫身邊的朋友看看簡歷,講講面試技巧,畢竟工作這么多年,也做到過高管,有很多面人經歷,意見還算有用,大家基本都能拿到想要的offer...

我深刻意識到,能自由做自己喜歡的事情是有多么不容易,又是多么有成就感。所以我拉了兩三個志同道合的好友,開了一間公司,繼續朝著“自由”的目標前進。

當下呢,我們希望有更多的朋友能夠參與到產品的測試中來,體驗并且給出更好的建議。未來可能會在博客po更多關于我們產品的內容,包括使用場景、說明、課程等,希望能對大家有所幫助。

另外,想整個花活兒,每天花個1-2小時,來幫助我素未謀面的老朋友們看看簡歷,提提意見啥的,純屬為愛發電。我在線時間不固定,但是不要米,咱就別要自行車兒了唄~如果您有興趣,可以點擊文章底部卡片一起交流(人工回復,比較慢,請擔待)。

最后,請大家持續關注我們的博客,未來還有很多欄目,一起發掘~!

(來呀~↓↓↓~老鐵)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74182.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74182.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

黑帽SEO之搜索引擎劫持-域名劫持原理分析

問題起源 這是在《Web安全深度剖析》的第二章“深入HTTP請求流程”的2.3章節“黑帽SEO之搜索引擎劫持”提到的內容&#xff0c;但是書中描述并不詳細&#xff0c;沒有講如何攻擊達到域名劫持的效果。 書中對SEO搜索引擎劫持的現象描述如下&#xff1a;直接輸入網站的域名可以進…

theos工具來編譯xcode的swiftUI項目為ipa文件

Theos 是一個開源的開發工具套件&#xff0c;主要用于為 iOS/macOS 平臺開發和編譯 越獄插件&#xff08;Tweaks&#xff09;、動態庫、命令行工具等。它由 Dustin Howett 創建&#xff0c;并被廣泛用于越獄社區的開發中。但這里我主要使用它的打包ipa功能&#xff0c;因為我的…

25.4.1學習總結【Java】

動態規劃題 2140. 解決智力問題https://leetcode.cn/problems/solving-questions-with-brainpower/ 給你一個下標從 0 開始的二維整數數組 questions &#xff0c;其中 questions[i] [pointsi, brainpoweri] 。 這個數組表示一場考試里的一系列題目&#xff0c;你需要 按順…

計算機網絡知識點匯總與復習——(二)物理層

Preface 計算機網絡是考研408基礎綜合中的一門課程&#xff0c;它的重要性不言而喻。然而&#xff0c;計算機網絡的知識體系龐大且復雜&#xff0c;各類概念、協議和技術相互關聯&#xff0c;讓人在學習時容易迷失方向。在進行復習時&#xff0c;面對龐雜的的知識點&#xff0c…

string的底層原理

一.構造函數 我們來看一下&#xff0c;string的底層就是一個字符型指針和一個size來表示string的大小&#xff0c;capacity來表示分配的內存大小。 我們來看我們注釋掉的第一個構造函數&#xff0c;我們是通過初始化列表來初始化size的大小&#xff0c;再通過size的大小來初始化…

Python FastAPI + Celery + RabbitMQ 分布式圖片水印處理系統

FastAPI 服務器Celery 任務隊列RabbitMQ 作為消息代理定時任務處理 首先創建項目結構&#xff1a; c:\Users\Administrator\Desktop\meitu\ ├── app/ │ ├── __init__.py │ ├── main.py │ ├── celery_app.py │ ├── tasks.py │ └── config.py…

【藍橋杯】每日練習 Day18

目錄 前言 動態求連續區間和 分析 代碼 數星星 分析 代碼 星空之夜 分析 代碼 前言 接下來是今天的題目&#xff08;本來是有四道題的但是有一道題是前面講過&#xff08;逆序數的&#xff0c;感興趣的小伙伴可以去看我歸并排序的那一篇&#xff09;的我就不再過多贅…

基于銀河麒麟桌面服務器操作系統的 DeepSeek本地化部署方法【詳細自用版】

一、3種方式使用DeepSeek 1.本地部署 服務器操作系統環境進行,具體流程如下(桌面環境步驟相同): 本例所使用銀河麒麟高級服務器操作系統版本信息: (1)安裝ollama 方式一:按照ollama官網的下載指南,執行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…

Python入門(7):Python序列結構-字典

字典Dictionary 字典(dictionary)和列表類似&#xff0c;也是可變序列&#xff0c;不過與列表不同&#xff0c;它是無序的可變序列&#xff0c;保存的為容是以“鍵-值對”的形式存放的。 Python 中的字典相當于 Java 或者 C中的 Map 對象。在C#中,就是Dictionary<TKey,TVa…

Flutter項目之構建打包分析

目錄&#xff1a; 1、準備部分2、構建Android包2.1、配置修改部分2.2、編譯打包 3、構建ios包3.1、配置修改部分3.2、編譯打包 1、準備部分 2、構建Android包 2.1、配置修改部分 2.2、編譯打包 執行flutter build apk命令進行打包。 3、構建ios包 3.1、配置修改部分 3.2、編譯…

不用再付費~全網書源一鍵下載,實現閱讀自由!!!

現在市面上有許多免費你看書的軟件&#xff0c;但都軟件內太多廣告彈窗&#xff0c;這無疑是很煩&#xff0c;有事一不小心點進去就下載了軟件&#xff0c;簡直讓人頭大&#xff01; 如果你遇到這樣的難題那么就應該看下本文~ 這是一款能一鍵將在線連載小說整合下載成標準格式&…

GCC RISCV 后端 -- GIMPLE IR 表示的一些理解

C/C源代碼經過 GCC 解析&#xff08;Parse&#xff09;及轉換后&#xff0c;通過 GIMPLE IR 予以表示&#xff08;Representation&#xff09;。其中&#xff0c;一個C/C源文件&#xff0c;通過 宏處理后&#xff0c;形成一個 轉譯單元&#xff08;Translation Unit&#xff09…

JAVA設計模式之適配器模式《太白金星有點煩》

太白金星握著月光凝成的鼠標&#xff0c;第108次檢查南天門服務器的運行日志。這個剛從天樞院調來的三等仙官&#xff0c;此刻正盯著瑤池主機房里的青銅鼎發愁——鼎身上"天地同壽"的云紋間&#xff0c;漂浮著三界香火系統每分鐘吞吐的十萬條功德數據。看著居高不下的…

以太坊DApp開發腳手架:Scaffold-ETH 2 詳細介紹與搭建教程

一、什么是Scaffold-ETH 2 Scaffold-ETH 2是一個開源的最新工具包&#xff0c;類似于腳手架。用于在以太坊區塊鏈上構建去中心化應用程序 &#xff08;DApp&#xff09;。它旨在使開發人員更容易創建和部署智能合約&#xff0c;并構建與這些合約交互的用戶界面。 Scaffold-ETH…

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六)

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六) Flask Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。 Flask也被稱為 “microframework” ,因為它使用簡單的核心,…

第十一章 VGA顯示圖片(還不會)

FPGA至簡設計實例 前言 一、項目背景 1. IP核概述 IP 核(Intellectual Property core)指的是知識產權核或知識產權模塊,其是具有特定電路功能的硬件描述語言程序,在EDA技術開發中具有十分重要的地位。美國著名的Dataquest咨詢公司將 半導體產業的IP定義為“用于ASIC或FPGA…

浙江大學公開課|第二季|從大模型、智能體到復雜AI應用系統的構建——以產業大腦為例

大家好&#xff0c;我是吾鳴。 前沿回顧 吾鳴之前給大家分享過浙江大學DeepSeek系列公開課第一季&#xff0c;第一季一共八講&#xff0c;內容介紹豐富&#xff0c;內容之廣&#xff0c;看完粉絲朋友直呼浙大良心。這八講公開課名稱分別是&#xff1a; 第一期&#xff08;上&…

Spring AOP中為所有類型通知傳遞參數的完整示例,包含詳細注釋和參數傳遞方式

以下是Spring AOP中為所有類型通知傳遞參數的完整示例&#xff0c;包含詳細注釋和參數傳遞方式&#xff1a; // 1. 目標類&#xff08;被增強的類&#xff09; package com.example;public class TargetService {public void doTask(String param) {System.out.println("…

【Git教程】將dev分支合并到master后,那么dev分支該如何處理

將 dev 合并到 master 后的分支狀態與操作指南 1. 合并后的分支狀態 dev 分支不會消失&#xff1a; Git 的 git merge 命令僅將 dev 的內容合并到 master&#xff0c;不會刪除 dev 分支。合并后&#xff0c;dev 分支仍然存在&#xff0c;其歷史記錄和代碼保持不變。 分支的 H…

【go】異常處理panic和recover

panic 和 recover 當然能觸發程序宕機退出的&#xff0c;也可以是我們自己&#xff0c;比如經過檢查判斷&#xff0c;當前環境無法達到我們程序進行的預期條件時&#xff08;比如一個服務指定監聽端口被其他程序占用&#xff09;&#xff0c;可以手動觸發 panic&#xff0c;讓…