当前位置: 首页 > news >正文

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

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

(来呀~↓↓↓~老铁)

相关文章:

  • 短视频文案--钓鱼女和滑板女
  • Review --- 线程基础
  • 【实战】LLaMA-Factory 如何做 LLM 的多轮对话微调
  • 【C++笔记】C++常见二叉树OJ和拓扑排序
  • 31天Python入门——第19天:再学面向对象·一切皆对象
  • Css:如何解决绝对定位子元素内容被父级元素overflow:hidden属性剪裁
  • 可实现黑屏与蓝屏反应的屏幕隐私保护软件分享
  • 《高校辅导员》考试考哪些内容?
  • nacos-sdk-go v2.29 中一个拼写错误,我定位了3个小时 ……
  • 主流车辆监控管理系统对比分析
  • 极客说|重大发布:vLLM V1
  • 2011-2019年各省地方财政国债还本付息支出数据
  • 【Tauri2】011——菜单menu(2)
  • 什么是 Java 泛型
  • 0-1背包问题和最长公共子序列
  • Java打卡-Day23-文件、IO流
  • 探索 Kubernetes 网络穿透:如何从外部访问 K8s Pod 地址
  • 【MySQL】InnoDB的索引为什么用B+树而不用B树?
  • Python----计算机视觉处理(Opencv:道路检测之道路透视变换)
  • 蓝桥杯2023年第十四届省赛真题-棋盘
  • 分类信息网站 建议 建设/优化设计答案五年级上册
  • 网站建设 上海交大/搜易网提供的技术服务
  • 门户网站属于数字媒体吗/武汉seo引擎优化
  • 有什么网站可以发布个人信息/网推拉新app推广接单平台
  • 做网站推广 需要ftp/互联网销售平台
  • 好的外国设计网站推荐/网络游戏营销策略