<前文回顾>
<今日更新>
一、开篇整活儿
今儿个咱唠唠 Spring Boot 里头的国际化。这玩意儿吧,说大不大,说小不小,整好了是锦上添花,整不好就是火上浇油。你要是刚入门,那可得悠着点儿,别一上来就整得自己"翻车"了。
二、国际化是啥玩意儿?
国际化是系统开发里头的一个核心问题,说白了就是让系统支持多语言。Spring Boot 里头默认就集成了国际化,用起来贼方便。
1. 国际化的核心概念
国际化里头有几个核心概念:Locale 、MessageSource 、ResourceBundle。
- 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,用来获取多语言的消息。
专有名词解释
- 国际化:系统开发里头的一个核心问题,让系统支持多语言。
- Locale:语言环境,比如说中文、英文啥的。
- MessageSource:消息源,用来获取多语言的消息。
- ResourceBundle:资源包,用来存储多语言的消息。
- LocaleResolver:Spring 里头的一个接口,用来解析语言环境。
- LocaleChangeInterceptor:Spring 里头的一个类,用来拦截语言环境的变化。
- SessionLocaleResolver:Spring 里头的一个类,用来解析会话中的语言环境。
写在最后
身为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),已经在找朋友内测了,比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offer...
我深刻意识到,能自由做自己喜欢的事情是有多么不容易,又是多么有成就感。所以我拉了两三个志同道合的好友,开了一间公司,继续朝着"自由"的目标前进。
当下呢,我们希望有更多的朋友能够参与到产品的测试中来,体验并且给出更好的建议。未来可能会在博客po更多关于我们产品的内容,包括使用场景、说明、课程等,希望能对大家有所帮助。
另外,想整个花活儿,每天花个1-2小时,来帮助我素未谋面的老朋友们看看简历,提提意见啥的,纯属为爱发电。我在线时间不固定,但是不要米,咱就别要自行车儿了呗~如果您有兴趣,可以点击文章底部卡片一起交流(人工回复,比较慢,请担待)。
最后,请大家持续关注我们的博客,未来还有很多栏目,一起发掘~!
(来呀~↓↓↓~老铁)