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

Spring MVC(三) 国际化

SpringMVC 国际化

  • 1、添加相关依赖
  • 2、配置MessageSourceBean
    • 方式一:ReloadableResourceBundleMessageSource
    • 方式二:ResourceBundleMessageSource
  • 3、添加消息资源文件
      • 英文 messages_en.properties
      • 中文 messages_zh_CN.properties
      • 默认 messages.properties
  • 4、消息工具类(代码应用)
  • 5、在代码中直接使用

随着全球化的加速发展,Web应用的多语言支持变得越来越重要。对于开发者来说,如何实现应用的国际化成为了一个不可忽视的问题。作为Java Web开发的重要框架,Spring MVC在处理国际化方面有着丰富的功能和灵活的解决方案。本文将探讨Spring MVC的国际化部分内容,并通过自己的在工作中的真实使用体验来帮助大家理解和应用这些功能。

1、添加相关依赖

如果是Maven项目中,可以在pom.xml文件中添加以下依赖:

<dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-webmvc</artifactId>  <version>5.3.10</version>  
</dependency>  
<dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-context-support</artifactId>  <version>5.3.10</version>  
</dependency>

2、配置MessageSourceBean

在Spring的配置文件applicationContext.xml中,可以通过以下两种方式进行注入并加载资源文件。

方式一:ReloadableResourceBundleMessageSource

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  <property name="basename" value="classpath:messages/messages"/> <!-- 消息资源文件的基本名称 -->  <property name="defaultEncoding" value="UTF-8"/> <!-- 默认编码 -->  
</bean>

方式二:ResourceBundleMessageSource

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">  <property name="basename" value="messages/messages"/> <!-- 消息资源文件的基本名称 -->  <property name="defaultEncoding" value="UTF-8"/> <!-- 默认编码 -->  
</bean>

另外还可以通过代码的方式进行bean的引入

@Bean  
public MessageSource messageSource() {  ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();  messageSource.setBasename("classpath:messages/messages"); // 消息资源文件的位置  messageSource.setDefaultEncoding("UTF-8"); // 设置默认编码  return messageSource;  
}

3、添加消息资源文件

src/main/resources的位置下创建消息资源文件夹messages,用于存储不同语言的消息。
例如,在messages文件夹下新建messages_en.properties的英文消息资源文件和messages_zh_CN.properties的中文消息资源文件。在文件中定义消息键和对应的值。 注意:存放位置可根据自己项目规范进行修改

英文 messages_en.properties

001=hello word!

中文 messages_zh_CN.properties

001=你好,世界!

默认 messages.properties

001=你好,世界!

4、消息工具类(代码应用)

创建MessageUtil.java工具类

package com.cloud.core.util;import java.util.Locale;import org.springframework.context.MessageSource;import com.cloud.core.holder.ContextHolder;public class MessageUtil {private static MessageSource messageSource;//ContextHolder为Spring容器上下文信息类,可通过继承ContextLoaderListener进行获取static {messageSource = (MessageSource) ContextHolder.getBean("messageSource");}/*** @Comments :获取消息* @param code 在*.properties文件中的消息键* @param locale 本地化语言,也可根据需要进行扩展* @return* @Author :程序员云笔记* @Date :2024年1月5日 上午11:00:29*/public static String getMessage(String code, Locale locale) {return messageSource.getMessage(code, null, locale);}/*** @Comments :获取消息* @param code 在*.properties文件中的消息键* @param args 参数数组,其中的参数将被填充,用于替换消息中的{0}、{1},详见java.text.MessageFormat* @param locale 本地化语言,也可根据需要进行扩展* @return* @Author :程序员云笔记* @Date :2024年1月5日 上午11:01:30*/public static String getMessage(String code, Object[] args, Locale locale) {return messageSource.getMessage(code, args, locale);}
}//以下是此工具类用到的部分代码
public class WebAppContextListener extends ContextLoaderListener {public void contextDestroyed(ServletContextEvent event) {}public void contextInitialized(ServletContextEvent event) {super.contextInitialized(event);WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());ContextHolder.setContext(context);}
}public class ContextHolder {private static ApplicationContext context;public static void setContext(ApplicationContext ctx) {if(context == null){context = ctx;}}public static Object getBean(String name) {return context.getBean(name);}
}

5、在代码中直接使用

MessageUtil.getMessage("001",Locale.ENGLISH);
MessageUtil.getMessage("001",Locale.CHINA);
MessageUtil.getMessage("001",Locale.getDefault());//输出以下消息
hello word!
你好,世界!
你好,世界!

以上就是本次项目国际化所有代码,有不足之处欢迎大家指导。

相关文章:

Spring MVC(三) 国际化

SpringMVC 国际化 1、添加相关依赖2、配置MessageSourceBean方式一&#xff1a;ReloadableResourceBundleMessageSource方式二&#xff1a;ResourceBundleMessageSource 3、添加消息资源文件英文 messages_en.properties中文 messages_zh_CN.properties默认 messages.propertie…...

四款坚固耐用、小尺寸、1EDB9275F、1EDS5663H、1EDN9550B、1EDN7512G单通道栅极驱动器IC

1、1EDB9275F 采用DSO-8 150mil封装的单通道隔离栅极驱动器&#xff08;PG-DSO-8&#xff09; EiceDRIVER™ 1EDB 产品系列 单通道栅极驱动器IC具有3 kVrms的输入输出隔离电压额定值。 栅极驱动器系列具有6/-4 ns传输延迟精度&#xff0c;可针对具有高系统级效率的快速开关应…...

登录页添加验证码

登录页添加验证码 引入验证码页面组件&#xff1a;ValidCode.vue <template><div class"ValidCodeContent" style""><divclass"ValidCode disabled-select":style"width:${width}; height:${height}"click"refre…...

03--数据库连接池

1、数据库连接池 1.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时&#xff0c;传统的模式基本是按以下步骤&#xff1a; 在主程序&#xff08;如servlet、beans&#xff09;中建立数据库连接进行sql操作断开数据库连接 这种模式开发&#xff0c;存在的问题:…...

MySQL表的基本插入查询操作详解

博学而笃志&#xff0c;切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…...

『 C++ 』红黑树RBTree详解 ( 万字 )

文章目录 &#x1f996; 红黑树概念&#x1f996; 红黑树节点的定义&#x1f996; 红黑树的插入&#x1f996; 数据插入后的调整&#x1f995; 情况一:ucnle存在且为红&#x1f995; 情况二:uncle不存在或uncle存在且为黑&#x1f995; 插入函数代码段(参考)&#x1f995; 旋转…...

c# 人脸识别的思路

在C#中实现人脸识别&#xff0c;您可以使用诸如虹软ArcFace等第三方人脸识别SDK。以下是一个基于虹软ArcFace SDK的C#人脸识别示例的大致步骤&#xff1a; 安装与引用SDK&#xff1a; 首先&#xff0c;您需要从虹软官网下载适用于C#的ArcFace人脸识别SDK&#xff0c;并将其安装…...

如何用AI提高论文阅读效率?

已经2024年了&#xff0c;该出现一个写论文解读AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴&#xff0c;一定深有体验——费劲。其他agents也没有能搞定的&#xff0c;今天我发现了一个超级厉害的写论文解读的agent &#xff0c…...

文件重命名方法:不同路径的文件名大小写如何批量转换技巧

在文件管理中&#xff0c;经常要处理文件重命名的问题&#xff0c;尤其是涉及到不同路径下的文件名大小写转换时。下面来看云炫文件管理器如何批量转换文件名的大小写的技巧&#xff0c;轻松完成这项任务。 准备多个不同路径文件夹&#xff0c;在里面各放几个文件。接下来开始…...

深度学习中的最优化算法是什么?

在深度学习中&#xff0c;最优化算法主要用于调整神经网络的参数&#xff08;如权重和偏差&#xff09;&#xff0c;以最小化或最大化某个目标函数&#xff08;通常是损失函数&#xff09;。这些算法对于训练高效、准确的深度学习模型至关重要。以下是几种在深度学习中常用的最…...

SQL执行时间过长如何优化

这个问题&#xff0c;其实跟慢 SQl 排查解决有点像。可以从以下这几个方面入手&#xff1a; 确定瓶颈 首先查看 MySQL 日志、慢查询日志、explain 分析 SQL 的执行计划、profile 分析执行耗时、Optimizer Trace分析详情等操作&#xff0c;确定查询执行的瓶颈在哪里。只有确定…...

局部阈值 local_threshold

Currently the operator offers only the Method adapted_std_deviation. This algorithm is a text binarization technique and provides good results for document images. 目前这个算子只提供adapted_std_deviation方法&#xff0c;这个算子是一个文本二值化技术&#xf…...

【C/C++】C语言的高级编程(内存分区,指针)

C语言的高级编程【内存&#xff0c;指针】 基本知识变量gcc size工具 内存分区指针相关定义和赋值指针加法函数指针多级指针数组指针传参 基本知识 变量 变量解释全局变量出现在代码块{}之外的变量就是全局变量局部变量一般情况下&#xff0c;代码块{}内部定义的变量就是自动…...

Python ❀ 使用代码实现API接口调用详解

文章目录 1. 工具准备1.1. requests代码包1.2. BurpSuite抓包工具 2. 操作过程2.1. 一个简单的请求2.1.1. Burp获取响应2.1.2. 转发获取响应 2.2. 构造GET类型URL参数2.3. 构造请求头部2.4. 构造POST类型payload数据2.4.1. urlencoded格式2.4.2. json格式 本文主要讲解常用API接…...

关于KT6368A双模蓝牙芯片的BLE在ios的lightblue大数量数据测试

测试简介 关于KT6368A双模蓝牙芯片的BLE在ios的lightblue app大数量数据测试 测试环境&#xff1a;iphone7 。KT6368A双模程序96B6 App&#xff1a;lightblue ios端 可以打开log日志查看通讯流程 测试数据&#xff1a;长度是1224个字节&#xff0c;单次直接发给KT6368A&a…...

云边协同的 RTC 如何助力即构全球实时互动业务实践

作者&#xff1a;即构科技 由 51 CTO 主办的“WOT 全球技术创新大会 2023深圳站”于 11 月 24 日 - 25 日召开&#xff0c;即构科技后台技术总监肖潇以“边缘容器在全球音视频场景的探索与实践”为主题进行分享。 边缘计算作为中心云计算的补充&#xff0c;通过边缘容器架构和…...

使用python连接elasticsearch

有一个困惑了好久的问题&#xff0c;那就是从python里面连接elasticsearch总是报错。大致长这样 一开始我是看网上把es的安全功能关闭&#xff0c;也就是下面的内容&#xff0c;这个要进入到es的docker中去改config/elasticsearch.yml配置文件&#xff0c;但是这样改了以后kib…...

使用elasticsearchdump迁移elasticsearch数据实战

目录 1.安装nodejs 2.安装elasticsearchdump 3.迁移 4.核对数据 5.注意事项 1.安装nodejs https://ascendking.blog.csdn.net/article/details/135509838 2.安装elasticsearchdump npm install elasticdump -g 3.迁移 elasticdump --inputhttp://用户:密码源ES地址/源…...

指向未来: 量子纠缠的本质是一个指针

指向未来: 量子纠缠的本质是一个指针 概述基本概念理解量子纠缠PythonJavaC 理解波粒二象性PythonJavaC 理解量子隧穿理解宇宙常量PythonJavaC 概述 量子纠缠 (Quantum Entanglement) 是量子系统重两个或多个粒子间的一种特殊连接, 这种连接使得即使相隔很远, 这些粒子的状态也…...

Zookeeper启动报错常见问题以及常用zk命令

Zk常规启动的命令如下 sh bin/zkServer.sh start 启动过程如果存在失败&#xff0c;是没办法直接看出什么问题&#xff0c;只会报出来 Starting zookeeper … FAILED TO START 可以用如下命令启动&#xff0c;便于查看zk启动过程中的详细错误 sh bin/zkServer.sh start-for…...

新手避坑指南:用MATLAB复现TI IWR1443雷达的距离与速度FFT处理(附完整代码)

新手避坑指南&#xff1a;用MATLAB复现TI IWR1443雷达的距离与速度FFT处理&#xff08;附完整代码&#xff09; 第一次拿到IWR1443毫米波雷达开发板时&#xff0c;看着官方文档里密密麻麻的英文术语和零散的代码片段&#xff0c;我对着电脑屏幕发呆了整整半小时。作为电子工程专…...

加油卡小程序玩法全解析:刚需场景破局,从充值裂变到合规运营全攻略

国内私家车与新能源车主群体持续扩容&#xff0c;加油、充电作为高频刚性消费场景&#xff0c;自带稳定流量与强付费意愿&#xff0c;加油卡小程序凭借轻量化、易传播、直达用户的优势&#xff0c;成为加油站、第三方车主服务平台、车企布局私域流量的核心载体。不同于潮玩等娱…...

探索电池2RC等效电路模型:从参数辨识到SOC估计

电池2RC等效电路模型&#xff0c;最小二乘法参数辩识&#xff0c;电池端电压误差小&#xff0c;扩展卡尔曼估计SOC精度高。 有文档&#xff0c;数据&#xff0c;视频&#xff0c;仿真图。在电池研究领域&#xff0c;准确建模和参数估计对于理解电池行为至关重要。今天咱就唠唠电…...

MAX30102血氧传感器避坑指南:如何解决I2C信号干扰问题(附Arduino代码)

MAX30102血氧传感器实战&#xff1a;I2C信号干扰的深度解析与解决方案 当你在深夜调试MAX30102传感器时&#xff0c;突然发现心率数据频繁跳变——这可能是I2C信号干扰在作祟。作为一款高精度光学传感器&#xff0c;MAX30102在医疗级血氧监测和心率检测中表现出色&#xff0c;但…...

泛微OA Ecology 安全补丁管理账号配置与实战

1. 泛微OA Ecology安全补丁管理账号配置详解 第一次接触泛微OA Ecology系统的安全补丁管理功能时&#xff0c;我完全没意识到这个看似简单的配置背后藏着这么多门道。直到有次系统被恶意攻击&#xff0c;才发现默认的管理账号存在安全隐患。今天就带大家彻底搞懂这个关键配置&a…...

图像分割损失函数调参指南:如何用Focal Loss拯救你的小目标检测模型

图像分割损失函数调参指南&#xff1a;如何用Focal Loss拯救你的小目标检测模型 当你在处理卫星图像中的微小建筑物或显微图像里的稀有细胞时&#xff0c;是否经常遇到模型对前景目标"视而不见"的情况&#xff1f;传统交叉熵损失在面对这种极端类别不平衡时往往力不从…...

EDK II代码质量门禁报告:全面解析门禁检查结果与最佳实践

EDK II代码质量门禁报告&#xff1a;全面解析门禁检查结果与最佳实践 【免费下载链接】edk2 EDK II 项目地址: https://gitcode.com/gh_mirrors/ed/edk2 EDK II作为现代、功能丰富的跨平台UEFI和PI规范固件开发环境&#xff0c;其代码质量门禁系统是确保固件可靠性和安全…...

vLLM-v0.17.1在专利分析系统中的应用:权利要求生成与比对

vLLM-v0.17.1在专利分析系统中的应用&#xff1a;权利要求生成与比对 1. 技术背景与需求分析 专利分析是知识产权领域的重要工作&#xff0c;其中权利要求书的生成与比对是核心环节。传统方法依赖人工撰写和比对&#xff0c;效率低下且一致性难以保证。随着大语言模型技术的发…...

终极Markdown转换神器:浏览器中的写作革命指南

终极Markdown转换神器&#xff1a;浏览器中的写作革命指南 【免费下载链接】markdown-here Google Chrome, Firefox, and Thunderbird extension that lets you write email in Markdown and render it before sending. 项目地址: https://gitcode.com/gh_mirrors/ma/markdow…...

EMI滤波器选型指南:从共模与差模噪声到实际应用场景

1. EMI滤波器的核心作用与选型挑战 刚入行那会儿&#xff0c;我负责的第一个电源项目就栽在了EMI测试上。设备一上电&#xff0c;测试仪器的曲线就像心电图发作似的疯狂跳动。当时 mentor 只说了一句&#xff1a;"去查查共模和差模的区别"。这句话成了我后来十年硬件…...