SpringBoot 国际化-自定义 LocaleResolver

  1. 准备国际化文件
资源目录下创建 i18文件夹,
i18 下面创建两个文件:            预配置信息           
messages_en_US.preperties     | success=success
messages_zh_CN.properties     | success=操作成功
  1. 在application.yml中指定国际化文件的位置
spring:messages:basename: i18/messages
  1. 创建一个自定义 local 解析器
package com.shi.demo.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;@Component
public class CustomLocalResolver implements LocaleResolver {@Autowiredprivate HttpServletRequest request;public Locale getLocale() {return resolveLocale(request);}@Overridepublic Locale resolveLocale(HttpServletRequest request) {Cookie[] cookies = request.getCookies();if (ObjectUtils.isEmpty(cookies)) {return Locale.getDefault();}List<Cookie> cookieList = Arrays.stream(request.getCookies()).filter(cookie -> cookie.getName().equals("locale")).collect(Collectors.toList());if (ObjectUtils.isEmpty(cookieList)) {return Locale.getDefault();}Locale locale = StringUtils.parseLocale(cookieList.get(0).getValue());if (ObjectUtils.isEmpty(locale)){return Locale.getDefault();}return locale;}@Overridepublic void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {}}
  1. 准备工具类。

使用Set注入解决 静态属性不能注入的问题。

package com.shi.demo.utils;import com.shi.demo.config.CustomLocalResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;@Component
public class I18Utils {private static CustomLocalResolver localResolver;private static ApplicationContext context;public static String getMessage(String code,Object[] args){return context.getMessage(code,args,localResolver.getLocale());}@Autowiredpublic void setLocalResolver(CustomLocalResolver localResolver) {I18Utils.localResolver = localResolver;}@Autowiredpublic void setContext(ApplicationContext context) {I18Utils.context = context;}
}
  1. 测试 代码
@RestController
@RequestMapping("/users")
public class UserController {@GetMappingpublic String get() {return "get请求:"+I18Utils.getMessage("success",null);}
}
  1. 发起请求
    使用的是idea 自带的http client 发送的请求
###
GET http://localhost:8080/users
#Cookie: locale=zh-cn  # 由于上面使用了StringUtils.parseLocale(),所以这里的值不区分大小写以及‘_’和‘-Cookie: locale=en_US

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web漏洞分析-文件解析及上传(上)

随着互联网的迅速发展&#xff0c;网络安全问题变得日益复杂&#xff0c;而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞&#xff0c;通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析&…

「Verilog学习笔记」简易秒表

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule count_module(input clk,input rst_n,output reg [5:0]second,output reg [5:0]minute);always (posedge clk or negedge rst_n) begin if (~rst…

控制笔记本电脑性能,增强性能/控制发热---Thinkpad x280

1、引言 手上有一台收来办公的Thinkpad x280,但安装的联想管家却没有性能调节选项&#xff0c;导致电脑性能释放很不顺手。由于有室外办公需求&#xff0c;也就有续航需求&#xff0c;也是让它减少发热&#xff1b;同时我想在室内的时候&#xff0c;完整发挥它的性能&#xff…

Spring框架中的8种设计模式

前言 Spring框架中的8种设计模式分别是&#xff1a;1、简单工厂。2、工厂方法。3、单例模式。4、适配器模 式。5、装饰器模式。6、代理模式。7、观察者模式。8、策略模式. 1、简单工厂 Spring中的BeanFactory就是简单工厂模式的体现&#xff0c;根据传入一个唯一的标识来获…

<Halcon> 局部放大显示

局部放大显示 当读取的图片为超大分辨率时&#xff0c;我们需要对局部位置或定位到的位置在显示窗口放大显示&#xff0c;主要算子为dev_set_part。 read_image (Image, printer_chip/printer_chip_01) gen_rectangle1 (ROI_0, 617.275, 1347.28, 828.349, 1449.5) dev_set_p…

springcloud微服务篇--2.微服务之间的调用

一、微服务案例需求1&#xff1a; 根据订单id查询订单的同时&#xff0c;把订单所属的用户信息一起返回 1、新建订单项目&#xff0c;用户服务。 2.RestTemplate实现微服务之间的访问。 在order-service的OrderApplication中注册RestTemplate 注入调用&#xff1a; Autowire…

Android 12.0 Launcher3定制化之修改添加的默认文件夹为9宫格样式

1. 概述 在12.0的系统产品rom定制化开发中,对于Launcher3的定制功能也是不少的,比如在Launcher3中添加默认文件夹,把默认的app添加的文件夹里面,其他的app 然后按顺序排序。在文件夹布局就是默认的9宫格布局,接下来分析下相关源码来实现相关功能的实现 2.Launcher3定制化…

tcn 时间序列回归实例

目录 torch-tcn库 示例代码 自定义实现tcn层 torch-tcn库 pip install torch-tcn 示例代码 import torch from torch import nn from tcn import TCNLayerbatch_size = 16 seq_length = 100 # 序列长度 n_features = 32 # 特征数量 n_outputs = 10 # 输出大小# 输入…

C#基础——字符串、字符串API

C#基础——字符串、字符串API 字符串是 System.String 类的实例。字符串表示文本数据&#xff0c;可以包含字母、数字、符号和空格等字符。 创建字符串 string str1 "Hello, World!"; // 使用双引号创建字符串 string str2 "This is a C# string.";字符…

Pyhon基于YOLOV实现的车辆品牌及型号检测项目源码+模型+项目文档

项目运行运行录屏&#xff1a; Pyhon基于YOLOV实现的车辆品牌及型号检测项目运行录屏 完整代码下载地址&#xff1a;Pyhon基于YOLOV实现的车辆品牌及型号检测项目 项目背景&#xff1a; 车辆检测及型号识别广泛应用于物业&#xff0c;交通等的管理场景中。通过在停车场出入口…

【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)

文章目录 题目C代码详解 题目 在二叉树T中&#xff0c;其度为1的结点是指某结点只有左孩子或只有右孩子。利用递归方法求二叉树T的度为1的结点个数。 1&#xff09;如果TNULL&#xff0c;则是空树&#xff0c;度为1的结点个数为0&#xff0c;返回值为0&#xff1b; 2&#xff0…

上海亚商投顾:沪指收复3000点,房地产板块集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日窄幅震荡&#xff0c;创业板指走势较弱&#xff0c;科创50指数跌近1%。房地产板块集体走强&#xff0…

深度学习中的各类评价指标

深度学习中的各类评价指标 1 Dice Loss2 Precision&#xff08;精度&#xff09;3 Recall&#xff08;召回率&#xff09;4 F-Score5 mAP 1 Dice Loss Dice Loss&#xff0c;也叫Soft Dice Coefficient&#xff0c;是一种用于图像分割任务的损失函数。它基于目标分割图像与模型…

Apache Flink(十一):Flink集群部署-Standalone集群部署

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 节点划分

设计模式——原型模式(创建型)

引言 原型模式是一种创建型设计模式&#xff0c; 使你能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类。 问题 如果你有一个对象&#xff0c; 并希望生成与其完全相同的一个复制品&#xff0c; 你该如何实现呢&#xff1f; 首先&#xff0c; 你必须新建一个属于…

C#基础——语法学习

C#的基本语法 在介绍基本语法之前我们先来大概讲一下创建好的这些文件都是做什么的 .sln文件&#xff1a;将项目和解决方案项结合到一起 .vs文件夹&#xff1a;用来存储当前解决方案中关于用户的设置和自定义项&#xff0c;比如断点&#xff0c;主题等。&#xff08;一般都将其…

GPT-4:背景、技术特点、发展、应用与前景

一、引言 随着人工智能技术的飞速发展&#xff0c;自然语言处理领域涌现出越来越多的创新成果。其中&#xff0c;GPT-4&#xff08;Generative Pre-trained Transformer 4&#xff09;作为OpenAI公司推出的最新一代大型语言模型&#xff0c;凭借其卓越的性能和广泛的应用场景&…

2312d,把alloca注入调用者域

原文 有以下技巧.因为无法推导长度,因此不理想,但这成功地把alloca注入到调用者域中. import core.stdc.stdlib:alloca; import std.range:ElementType; import core.lifetime:moveEmplace; struct VLA(T,alias len){T[] storage;this(R)(R initializer,return void[] storage…

什么是设计模式

一、概述 1、设计模式是解决某些问题的办法 2、设计模式不是凭空想象出来的&#xff0c;是经验的总结和积累 3、设计模式是不断的发展的 4、各个行业都有自己的设计模式 二、设计模式的基本要素 设计模式一般包括模式的名称、问题、目的、解决方案、效果、实例代码和相关…

C++ 类型萃取

什么是 type_traits 在C中&#xff0c;类型萃取&#xff08;type_traits&#xff09;是一种编译时技术&#xff0c;用于在编译期间获取和操作类型的信息。 主要用于泛型编程以及在编译时做出决策。 类型萃取可以帮我们检查和处理类型特性&#xff0c;从而优化代码、避免错误或…