SpringBoot复习:(36)国际化

news/2025/1/15 12:58:04/

一、Resources目录下建立一个目录(比如international)来存储资源文件
message.properties
空的,但不能没有
message_zh_CN.properties

hello=您好

message_en_us.properties

hello=hello world

二、自动配置类MessageSourceAutoConfiguration
在这里插入图片描述
常量MESSAGE_SOURCE_BEAN_NAME为messageSource,也就是有这个名字的bean,则自动配置失效。
因为有@Conditional(ResourceBundleCondition)注解,
还要满足ResourceBundleCondition这个类的match方法返回true,自动配置才会生效
在这里插入图片描述
在这里插入图片描述

默认加载的资源文件为resources目录下的messages.properties,有这个文件match返回true,否则返回false.
还可以在application.properties中配置spring.messages.basename来指定国际化资源文件的位置,如
spring.messages.basename=international.message
条件满足后,MessageSourceAutoConfiguration自动配置一个Message Source bean
在这里插入图片描述
三、有了Message Resource,我们还需要LocaleResolver来对Message Resource进行解析

WebMvcAutoConfiguration中配置了一个LocalResolver bean
在这里插入图片描述
当没有配置LOCAL_RESOLVER_BEAN_NAME(常量值为localeResolver)这个bean时,自动配置的这个LocaleResolver生效

四、controller中返回国家化信息

package cn.edu.tju.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Locale;@RestController
public class InternationalController {@Autowiredprivate MessageSource messageSource;@RequestMapping(value = "/int", produces = "txt/html;charset=utf-8")public String getInt(){return messageSource.getMessage("hello", null, Locale.SIMPLIFIED_CHINESE);}@RequestMapping("/int2")public String getInt2(){return messageSource.getMessage("hello", null, Locale.US);}@RequestMapping("/int3")public String getInt3(){return messageSource.getMessage("hello", null, LocaleContextHolder.getLocale());}
}

国际化时,@RequestMapping注解要加produces来设置编码来防止乱码。

####################################################

可以自定义LocaleResolver来覆盖WebMvcAutoConfiguration中自动装配的LocaleResolver
首先自定义WebMvcConfigurer来添加LocaleChangeInterceptor拦截器

package cn.edu.tju.config;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.view.InternalResourceViewResolver;import java.util.Locale;@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {System.out.println("YES!!!!!!!!!!!!!!!!!");//添加拦截器registry.addInterceptor(new MyInterceptor())//.addPathPatterns("/api").excludePathPatterns("/test");registry.addInterceptor(new LocaleChangeInterceptor()).addPathPatterns("/**");}}

其次,配置一个CookieLocaleChangeResolver

package cn.edu.tju.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;@Configuration
public class CookieResolverConfig {@Bean(name="localeResolver")public CookieLocaleResolver getResolver(){CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();cookieLocaleResolver.setCookieMaxAge(60*60*1000);cookieLocaleResolver.setCookieName("myLocale");return cookieLocaleResolver;}}

请求中的locale这个参数会被LocaleChangeInterceptor拦截,
在这里插入图片描述
在这里插入图片描述
它最终会把请求参数对应的Locale设置到我们所配置的CookieLocaleResolver,这样同样也为国际化做好了准备


http://www.ppmy.cn/news/1029347.html

相关文章

MybatisPlus多数据源

适用于多种场景:纯粹多库、 读写分离、 一主多从、 混合模式等 目前我们就来模拟一个纯粹多库的一个场景,其他场景类似 以下的案例是使用多个数据库 准备工作在不同的数据库中创建不同的表分别为t_user 和product 启动类记得加MapperScan注解 第一步&a…

Spring的事件处理机制

文章目录 1.前言2.事件机制三要素2.1 定义事件2.2 监听事件1.实现 ApplicationListener 接口2.使用 EventListener 注解3.TransactionalEventListener注解 2.3 发布事件 3.异步事件4.实战 1.前言 最近看公司代码,发现针对消息队列的消费和分发做了很多很精妙的设计…

day24-106.从中序与后序遍历序列构造二叉树

106.从中序与后序遍历序列构造二叉树 力扣题目链接(opens new window) 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&am…

jsoup解析html之table表格

jsoup解析html之table表格 jsoup说明 一款Java 的HTML解析器 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 主要功能 从一…

【K8S系列】深入解析k8s网络插件—Weave Net

序言 做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 Kubernetes (k8s) 是一个容器编…

云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM---初步使用(二)

前言: 在前面一篇文章云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM---初始安装(一)_华为cna_晚风_END的博客-CSDN博客 介绍了基于VMware虚拟机里嵌套部署华为云的云计算,不过仅仅是做到了在VRM的web界面添加计算节点…

链表2-移除链表元素设计链表反转链表

这篇文章主要记录链表题目: ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表 移除链表元素 题目链接:203.移除链表元素 思路是找到链表中值为val的元素,修改前节点next指向,并删除查找到的节点。技巧:利用好临…

7.5.tensorRT高级(2)-RAII接口模式下的生产者消费者多batch实现

目录 前言1. RAII接口模式封装生产者消费者2. 问答环节总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-RAI…