【Spring】04 国际化

文章目录

      • 1. 定义
      • 2. Spring 的支持
        • 1) MessageSource接口
        • 2) ResourceBundleMessageSource
      • 3. 配置国际化
        • 1)配置MessageSource Bean
        • 2)创建资源文件
        • 3)在Bean中使用国际化消息
      • 4. 使用占位符和参数
      • 结语

Spring 为我们提供了强大的国际化支持,其中 ApplicationContext 扮演了关键角色。

1. 定义

国际化 (Internationalization) 是指为了适应不同的语言、地区和文化,使应用程序能够轻松地切换和提供多语言支持的过程。在软件开发中,国际化通常缩写为i18n因为 i 后面是 18 个字母 然后是 n 因此得名)。

2. Spring 的支持

Spring 框架通过 ApplicationContext 提供了全面的国际化支持。ApplicationContext 是 Spring 容器的一个门面接口,它除了提供了依赖注入、AOP 等特性外,还集成了国际化功能。

1) MessageSource接口

在 Spring 中,国际化的核心接口是 MessageSourceMessageSource 定义了一系列用于获取国际化消息的方法,包括根据消息键获取消息、指定语言环境等。

在这里插入图片描述

2) ResourceBundleMessageSource

ResourceBundleMessageSource 是 Spring 框架提供的 MessageSource 的实现类之一,它通过ResourceBundle 加载消息,支持基于属性文件的国际化。

在这里插入图片描述

3. 配置国际化

1)配置MessageSource Bean

首先,我们需要在 Spring 的配置文件中配置 MessageSource Bean。以下是一个基于XML配置的示例:

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

在上述配置中,basenames 指定了一个或多个资源文件的基本名称,这里使用了名为 messages 的资源文件。

2)创建资源文件

在类路径下创建对应的资源文件,例如 messages.propertiesmessages_fr_FR.properties。其中,messages.properties 包含默认的消息,而 messages_fr_FR.properties 包含法语(法国)的翻译。

messages.properties

hello.message=Hello, {0}!

messages_zh_CN.properties

hello.message=你好, {0}!
3)在Bean中使用国际化消息

在需要国际化的 Bean 中,我们可以通过 MessageSource 接口获取消息。

public class GreetingService {
    private MessageSource messageSource;

    public GreetingService(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    public String getGreeting(String name, Locale locale) {
        return messageSource.getMessage("hello.message", new Object[]{name}, locale);
    }
}

4. 使用占位符和参数

国际化消息可以包含占位符和参数,以便在运行时替换为实际的值。在上面的示例中,{0} 就是一个占位符,它会在运行时被 name 参数的值替换。

结语

Spring ApplicationContext 的国际化支持是构建多语言友好应用的重要组成部分。通过合理配置 MessageSource 和提供相应的资源文件,我们可以在应用中轻松实现国际化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

橘子学K8S01之容器中所谓的隔离

我们一直都在说容器就是一个沙盒&#xff0c;沙盒技术顾名思义就是像一个集装箱一样&#xff0c;把应用(服务&#xff0c;进程之类的)装起来的技术&#xff0c;这样每个进程在自己的沙盒中和其他的沙盒隔离开来&#xff0c;每个沙盒之间存在一个边界使得他们互不干扰&#xff0…

【动手学深度学习】(十三)深度学习硬件

文章目录 一、CPU和GPU二、更多的芯片1.DSP:数字信号处理2.可编程阵列(FPGA)3.AI ASIC 三、单机多卡并行 一、CPU和GPU 提升CPU利用率 在计算ab之前&#xff0c;需要准备数据 主内存->L3->L2->L1->寄存器(数据只有进入寄存器才可以参与运算) 提升空间和时间的内存…

Linux基本开发工具

编译器和自动化构建工具 一、编译器——gcc、g1. 安装 gcc/g2. 使用3. 链接库4. 拓展命令&#xff1a;od/file/ldd/readelf 二、自动化构建项目——make、makefile1. 介绍2. 使用例子touch——change file timestampsstat——display file or file system status修改时间 .PHON…

Java入门学习笔记二

一、抽象类 当编写一个类时&#xff0c;我们往往会为该类定义一些方法&#xff0c;这些方法是用来描述该类的行为方式&#xff0c;那么这些方法都有具体的方法体。 分析事物时&#xff0c;发现了共性内容&#xff0c;就出现向上抽取。会有这样一种特殊情况&#xff0c;就是功…

国家开放大学 湖南开放大学形成性考核 平时作业 统一资料

试卷代号&#xff1a;1258 房屋建筑混凝土结构设计 参考试题 一、单项选择题&#xff08;每小题2分&#xff0c;共计40分&#xff09; 1.( )是将框架结构中的部分跨间布置剪力墙或把剪力墙结构的部分剪力墙抽掉改为框架承重。 A.梁板结构体系 B.框…

区块链的可拓展性研究【05】闪电网络

1.闪电网络&#xff1a;闪电网络是一种基于比特币区块链的 Layer2 扩容方案&#xff0c;它通过建立一个双向支付通道网络&#xff0c;实现了快速、低成本的小额支付。闪电网络的交易速度非常快&#xff0c;可以达到每秒数万笔交易&#xff0c;而且交易费用非常低&#xff0c;几…

Linux---复制、移动文件及目录命令

1. 复制、移动文件及目录命令的使用 命令说明cp拷贝文件、拷贝目录mv移动文件、移动目录、重命名 cp命令效果图: 说明: 拷贝目录需要加上-r选项&#xff0c;-r表示递归拷贝目录及其内容 mv命令移动文件效果图 mv命令移动目录效果图 mv命令重名名效果图 2. 小结 cp&#…

TwinCAT3 Modbus-TCP Client/Server使用

目录 一、环境配置和准备 1、PLC中安装TF6250-Modbus-TCP库 2、勾选TF6250的license 3、PLC工程中添加Tc2_ModbusSrv库文件 4、分别创建测试ModbusTCP测试的Server和Client程序 二、PLC作为Client端 1、设置测试电脑IP地址 2、运行MobusTCP测试工具 3、PLC端程序编写 …

Python 使用 openpyxl 写表格

当前环境&#xff1a;Win10 x64 MS office 2016 Python3.7 openpyxl3.0.9 1 写入表格 from openpyxl import Workbook# 创建一个 workbook workbook_w Workbook()# 获取被激活的 worksheet worksheet_w workbook_w.active# 1 批量插入数据# 设置一行数据 worksheet_w.ap…

鸿蒙ArkTS基础类库——线性容器

容器类库概述 容器类库&#xff0c;用于存储各种数据类型的元素&#xff0c;并具备一系列处理数据元素的方法&#xff0c;作为纯数据结构容器来使用具有一定的优势。容器类采用了类似静态语言的方式来实现&#xff0c;并通过对存储位置以及属性的限制&#xff0c;让每种类型的…

自己动手写数据库: select 查询语句对应查询树的构造和执行

首先我们需要给原来代码打个补丁&#xff0c;在SelectScan 结构体初始化时需要传入 UpdateScan 接口对象&#xff0c;但很多时候我们需要传入的是 Scan 对象&#xff0c;因此我们需要做一个转换&#xff0c;也就是当初始化 SelectScan 时&#xff0c;如果传入的是 Scan 对象&am…

vs2019 配置liblas

vs2019 配置liblas liblas是一个开源的C库&#xff0c;用于读写LAS格式的点云数据。libLAS易于使用&#xff0c;广泛应用于各种点云处理任务。它支持基本的点云数据操作&#xff0c;如读取、写入和编辑LAS文件中的点。 1.源码下载 https://github.com/libLAS/libLAS 2.编译 首…

Docker多平台安装与配置指南

Docker的流行使得它成为开发者和运维人员不可或缺的工具。在本文中&#xff0c;将深入探讨如何在不同平台上安装和配置Docker&#xff0c;旨在为大家提供详尽的指南&#xff0c;确保他们能够顺利地使用这一强大的容器化工具。 Docker基础概念回顾 Docker利用容器技术&#xf…

设计模式-访问者模式

访问者模式是设计模式中行为型模式的一种&#xff08;其他的还有如创建型、结构型&#xff09;&#xff0c;听说是设计模式中比较难理解的一种&#xff0c;最近项目中用到了该模式&#xff0c;所以今天总结和实践一下。 一、访问者模式要解决的问题&#xff1a; 稳定的数据结…

【系统架构】集群、分布式概念及系统架构演进过程

集群、分布式概念&#xff1a; 对食物没有太高要求的人在肚子饿的时候一般都会选择去兰州拉面、沙县小吃等小饭馆&#xff0c;这类小饭馆有个很显著的特点&#xff1a;洗菜、切菜、炒菜都是同一个人完成&#xff0c;如果厨子不舒服可能饭馆还会歇业。而一些人流量较大的饭馆的分…

MATLAB 平面拟合并可视化(34)

MATLAB 平面拟合并可视化(34) 一、效果二、代码一、效果 二、代码 % 生成三维点数据 x = rand(100, 1); y = rand(100, 1

nest框架的token登录,以及token校验

1.搭建项目 项目初始化&#xff1a; npm i -g nestjs/cli nest new project-name 在终端下执行这四个命令&#xff0c;生成两个新模块&#xff1a; nest g module auth nest g service auth nest g module users nest g service users 然后把这三个文件删掉&#xff0c;是没有…

【LeetCode刷题笔记(4)】【Python】【移动零】【简单】

文章目录 题目描述示例 1示例 2提示 解决方案题意拆解双指针算法双指针法的主要优点双指针法的使用场景举例&#xff1a; 解决方案&#xff1a;【双指针一次遍历】解题心得方案代码运行结果复杂度分析 结束语 移动零 题目描述 给定一个数组 nums&#xff0c;编写一个函数将所…

OWASP ESAPI 预防XSS跨站脚本攻击

跨站脚本攻击XSS案例&#xff1a;跨站脚本攻击XSS案例及其解决方案_xss攻击案例-CSDN博客 Java集成&#xff1a; 1、引入maven <!--OWASP ESAPI&#xff0c;防御 XSS跨站攻击--><dependency><groupId>org.owasp.esapi</groupId><artifactId>esa…

ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角

本节课的内容&#xff0c;就让我们来学习一下ArrayList集合的应用&#xff0c;ArrayList的本质就是一个顺序表&#xff0c;那下面一起来学习吧 目录 一、杨辉三角 1.题目详情及链接 2.剖析题目 3.思路及代码 二、洗牌算法 1.创造牌对象 2.创造一副牌 3.洗牌操作 4.发…