MessageSource学习

简介

MessageSource 是 Spring 框架中的一个接口,它负责提供对国际化(i18n)和本地化(l10n)消息的支持。MessageSource 接口定义了一组方法,允许应用程序根据指定的消息代码和参数来获取本地化的消息字符串。

MessageSource 接口的主要方法包括:

  • getMessage(String code, Object[] args, String defaultMessage, Locale locale): 这是获取消息的主要方法。它接受一个消息代码(code),一组参数(args),一个默认消息(defaultMessage)以及一个地区信息(locale)。如果找到了与给定代码和地区信息匹配的本地化消息,它将返回该消息。如果没有找到匹配的本地化消息,它将返回默认消息。
  • getMessage(MessageSourceResolvable resolvable, Locale locale): 这是一个更灵活的方法,它接受一个 MessageSourceResolvable 对象和一个地区信息作为参数。MessageSourceResolvable 允许你以更复杂的方式指定消息代码和参数。

在 Spring 中,你可以通过配置一个 MessageSource 的实现类(如 ReloadableResourceBundleMessageSource 或 StaticMessageSource)来提供消息源。这些实现类通常加载并缓存外部资源文件(如属性文件或 XML 文件),这些资源文件包含了不同语言环境下的消息定义。

源码

public interface MessageSource {//获取消息@NullableString getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);//根据地区获取消息String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;}

示例

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  <property name="basenames">  <list>  <value>classpath:messages</value>  <value>classpath:messages_en</value>  </list>  </property>  <property name="defaultEncoding" value="UTF-8"/>  
</bean>

在这个例子中,ReloadableResourceBundleMessageSource 被配置为加载名为 messages 和 messages_en 的属性文件。这些文件应该位于类路径(classpath)下,并包含不同语言环境下的消息定义。

一旦你配置了一个 MessageSource,你就可以在你的应用程序中通过 MessageSource 的实例来获取本地化的消息。这通常在控制器、服务层或视图模板中完成,以便根据用户的地区偏好显示相应的消息。

实现类ResourceBundleMessageSource

简介

ResourceBundleMessageSource 是 Spring 框架中 MessageSource 接口的一个实现类。它用于从 Java 的 ResourceBundle 加载本地化消息。ResourceBundle 通常用于存储与特定区域设置(Locale)相关的键值对,这些键值对可以代表应用程序中的文本消息。

ResourceBundleMessageSource 会根据提供的区域设置(Locale)来查找适当的 ResourceBundle,并从中检索消息。如果没有找到与特定区域设置匹配的资源束,它会回退到默认的区域设置(通常是基础名称,没有区域设置后缀)。

以下是 ResourceBundleMessageSource 的一些关键特性:

  • 基名(Basenames): 你需要为 ResourceBundleMessageSource 提供基名,这通常是资源束的基础名称。例如,对于英语,你可能有一个名为 messages_en 的资源束,而对于中文,你可能有一个名为 messages_zh 的资源束。
  • 默认编码(Default Encoding): 你可以指定资源束的默认字符编码,以确保在读取资源文件时使用正确的编码。
  • 缓存(Caching): ResourceBundleMessageSource 默认会缓存加载的资源束,以提高性能。这意味着一旦资源束被加载,它就不会再次被加载,除非它被明确地刷新或重新加载。
  • 使用回退(Fallback): 如果没有找到与特定区域设置匹配的资源束,ResourceBundleMessageSource 可以配置为回退到默认的资源束或回退到父级区域设置。

示例

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">  <property name="basenames">  <list>  <value>classpath:messages</value>  </list>  </property>  <property name="defaultEncoding" value="UTF-8"/>  
</bean>

在这个例子中,ResourceBundleMessageSource 被配置为从类路径下的 messages 资源束中加载消息。defaultEncoding 属性被设置为 UTF-8,以确保使用正确的字符编码读取资源文件。

@Autowired  
private MessageSource messageSource;  public String getLocalizedMessage(String code, Locale locale) {  return messageSource.getMessage(code, null, locale);  
}

在这个例子中,getLocalizedMessage 方法使用 MessageSource 来获取与给定代码和区域设置匹配的本地化消息。

记住,ResourceBundleMessageSource 依赖于 Java 的标准 ResourceBundle 机制,这意味着你需要按照 Java 的 ResourceBundle 命名约定来命名和组织你的资源文件。例如,对于英语,你可能会有一个名为 messages_en.properties 的文件,而对于法语,你可能会有一个名为 messages_fr.properties 的文件。

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

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

相关文章

Runaway Queries 管理:提升 TiDB 稳定性的智能引擎

在数字化系统扮演重要角色的今天&#xff0c;数据库稳定性成为企业关注的核心问题。对于重要计算机系统而言&#xff0c;突发的性能下降可能对业务造成不可估量的损失。为了稳定数据库性能&#xff0c;用户可以从管理流程入手规范变更的测试&#xff0c;或者利用产品手段减少预…

3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection

3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection 论文链接&#xff1a;https://arxiv.org/pdf/2012.04355.pdf 代码链接&#xff1a;https://github.com/yezhen17/3DIoUMatch 作者单位&#xff1a;Stanford University等 发表平台&#xff1a;…

【JavaEE】_Servlet程序的编写方法

目录 1. 创建项目 2. 引入依赖 3. 创建目录结构 3.1 在main目录下创建一个webapp目录 3.2 在webapp目录下创建一个WEB-INF目录 3.3 在WEB-INF目录下创建一个web.xml文件 3.4 在web.xml中进行代码编写 4. 编写代码 4.1 在java目录下创建类 4.2 打印"hello world&…

无人机精准定位技术,GPS差分技术基础,RTK原理技术详解

差分GPS的基本原理 差分GPS&#xff08;Differential GPS&#xff0c;简称DGPS&#xff09;的基本原理是利用一个或多个已知精确坐标的基准站&#xff0c;与用户&#xff08;移动站&#xff09;同时接收相同的GPS卫星信号。由于GPS定位时会受到诸如卫星星历误差、卫星钟差、大…

uniapp离线打包(使用Android studio打包)

一、准备工作 安装HbuilderX&#xff0c;记住版本号下载对应HbuilderX版本的Android离线SDK&#xff0c;如我使用3.6.18版本打包&#xff0c;则对应应下载3.6.18版本的SDK&#xff08;官网不提供旧版本的SDK&#xff0c;有些需要自己找&#xff09;官网下载地址&#xff1a;ht…

基于Java+SpringBoot+Vue.js前后端分离水果购物商城系统设计和实现 可行性分析

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

2、Web攻防-SQL注入-联合查询注入

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正&#xff01; 声明&#xff1a;只用于学习交流&#xff0c;点到为止&#xff0c;请勿非法测试。 概念&#xff1a; 联合查询注入&#xff1a;联合注入是回显注入的一种&#xff0c;也就是说联合注入的前…

【Python如何求出水仙花数】

1、求水仙花数Python代码如下&#xff1a; # 求水仙花数&#xff1a;只需要个十百位的3次幂之和与原数相等 for i in range(100, 1000): # 循环100-999整数i1 i % 10 # 取个位 “%”表示除以后取余数i2 i // 10 % 10 # 取十位i3 i // 100 # 取百位 “//”表示除以后取整…

二十六、直方图均衡化

项目功能实现&#xff1a;对灰度图片进行直方图均衡化操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 histogram_equal.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class HISTOGRAM_EQUAL { public:void histogram_equal(Mat…

nginx 模块

ngx_http_core_module 核心模块 ngx_http_access_module 访问控制模块 deny allow ngx_http_auth_basic_module 身份 小红小名&#xff08;虚拟用户&#xff09; ftp也有虚拟用户 ngx_http_gzip_module 压缩模块 ngx_http_gzip_static_module ngx_http_log_modu…

计网七层模型:从物理层到应用层

哈喽大家好&#xff0c;我是chowley&#xff0c;相信大家在面试中都被问到过网络模型&#xff0c;今儿我就来总结一下每层的功能和特点&#xff01; 在计算机网络中&#xff0c;七层网络模型&#xff08;ISO/OSI参考模型&#xff09;是一种标准的网络架构&#xff0c;用于描述…

编程笔记 Golang基础 018 常量与变量

编程笔记 Golang基础 018 常量与变量 一、常量常量的定义iota特性 二、变量变量定义变量作用域零值与初始化类型转换注意事项 三、重要性 常量&#xff0c;就是在程序编译阶段就确定下来的值&#xff0c;而程序在运行时则无法改变该值。变量是程序的基本组成单位&#xff0c;用…

Android 解决后台服务麦克风无法录音问题

Android 解决后台无法录音问题 问题分析问题来源解决方案1. 修改清单文件:`AndroidManifest.xml`2. 修改启动服务方式3. 服务启动时创建前台通知并且指定前台服务类型参考文档最后我还有一句话要说我用心为你考虑黄浦江的事情,你心里想的却只有苏州河的勾当 问题分析 安卓9.…

2024年华为OD机试真题-字符串拼接-Python-OD统一考试(C卷)

题目描述: 给定M(0<M<=30)个字符(a-z),从中取出任意字符(每个字符只能用一次)拼接成长度为N(0<N<=5)的字符串,要求相同的字符不能相邻,计算出给定的字符列表能拼接出多少种满足条件的字符串,输入非法或者无法拼接出满足条件的字符串则返回0。 输入描述: …

视频监控平台如何结合AI技术

视频监控平台与AI技术的结合为安防领域带来了革命性的进步。通过引入AI技术&#xff0c;视频监控平台可以实现对监控视频内容的智能分析、识别和理解&#xff0c;从而提高监控效率和准确性&#xff0c;为城市安全和管理提供有力支持。 首先&#xff0c;视频监控平台可以利用AI…

抖音数据挖掘软件|视频内容提取

针对用户获取抖音视频的需求&#xff0c;我们开发了一款功能强大的工具&#xff0c;旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索&#xff0c;实现自动批量抓取视频&#xff0c;并根据需要进行选择性批量下载。因此&a…

【Flink精讲】Flink任务调度机制

Graph 的概念 Flink 中的执行图可以分成四层&#xff1a; StreamGraph -> JobGraph -> ExecutionGraph -> 物理执 行图。 StreamGraph&#xff1a;是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。JobGraph&#xff1a; StreamGraph …

pytest+yaml【接口测试框架】需要解决的问题:

接口关联&#xff1a;如果有接口关联&#xff0c;那么在下一个接口里无法直接调用python里面的方法&#xff0c;而是需要在下一个接口里通过调用方法去覆盖原值【动态参数】如何在yaml中调用随机数的方法呢&#xff1f;random函数&#xff08;让YAML能够调用外部函数---热加载&…

[更新]ARCGIS之土地耕地占补平衡、进出平衡系统报备坐标txt格式批量导出工具(定制开发版)

序言 之前开发的耕地占补平衡报备格式&#xff0c;现在之前的基础上集成了耕地进出平衡报备格式导出。 之前版本软件详见&#xff1a;软件介绍 一、软件简介 本软件是基于arcgis二次开发的工具&#xff08;插件&#xff09;&#xff0c;需要授权后才能使用&#xff1b; 本软件…

设计模式——抽象工厂模式

定义: 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;提供一个创建一系列或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 概述:一个工厂可以提供创建多种相关产品的接口&#xff0c;而无需像工厂方法一样&#xff0c;为每一个产品都提供一个具体…