【 <二> 丹方改良: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小时,来帮助我素未谋面的老朋友们看看简历,提提意见啥的,纯属为爱发电。我在线时间不固定,但是不要米,咱就别要自行车儿了呗~如果您有兴趣,可以点击文章底部卡片一起交流(人工回复,比较慢,请担待)。

最后,请大家持续关注我们的博客,未来还有很多栏目,一起发掘~!

(来呀~↓↓↓~老铁)

相关推荐
西木风落3 分钟前
springboot整合Thymeleaf web开发出现Whitelabel Error Page
spring boot·thymeleaf error·whitelabelerror
·云扬·4 分钟前
深度剖析 MySQL 与 Redis 缓存一致性:理论、方案与实战
redis·mysql·缓存
伊成9 分钟前
Springboot整合Mybatis+Maven+Thymeleaf学生成绩管理系统
java·maven·mybatis·springboot·学生成绩管理系统
一人の梅雨22 分钟前
化工网平台API接口开发实战:从接入到数据解析‌
java·开发语言·数据库
扫地的小何尚27 分钟前
NVIDIA工业设施数字孪生中的机器人模拟
android·java·c++·链表·语言模型·机器人·gpu
汤姆大聪明35 分钟前
Redisson 操作 Redis Stream 消息队列详解及实战案例
redis·spring·缓存·maven
Niuguangshuo36 分钟前
Python设计模式:克隆模式
java·开发语言·python
suimeng61 小时前
基本元素定位(findElement方法)
java·selenium
方渐鸿1 小时前
【2025】快速部署安装docker以及项目搭建所需要的基础环境(mysql、redis、nginx、nacos)
java·运维·docker·持续部署·dockercompse
程序员鱼皮1 小时前
2025最新 Java 面经:美团后端面试真实复盘,附答案模板,速速收藏!
java·后端·面试