【 <二> 丹方改良: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.mzph.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;让…