Spring之 国际化:i18n

1、i18n概述

国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化。通常来讲,软件中的国际化是通过配置文件来实现的,假设要支撑两种语言,那么就需要两个版本的配置文件。

2、Java国际化

Java国际化是一种重要的技术,它允许您的应用程序在不同的语言环境和地域之间无缝切换,以提供更广泛的用户群体。Java提供了一些关键的类和机制来实现国际化,其中包括java.util.Localejava.util.ResourceBundle

1. java.util.Locale

Locale类用于表示用户的语言环境和地域信息。它包括语言代码和国家/地区代码。您可以使用Locale来确定用户所在的语言环境,然后加载相应的本地化资源。例如:

Locale usLocale = new Locale("en", "US"); // 英语(美国)

2. java.util.ResourceBundle

ResourceBundle类用于加载本地化资源。资源束是包含本地化文本、图像、音频等资源的文件。这些资源文件的命名规则是基于基本文件名加上语言和国家/地区的标识符。例如,如果有一个名为"messages"的资源束文件,那么可以有以下命名的资源文件:

  • messages.properties(默认)
  • messages_en_US.properties(英语(美国))
  • messages_fr_FR.properties(法语(法国))
  • messages_zh_CN.properties (中文(中国))

ResourceBundle会根据Locale自动选择合适的资源文件。如果找不到特定的本地化资源文件,它会回退到默认资源文件。

3. 配置文件命名规则

在Java国际化中,配置文件必须遵循特定的命名规则,以便Java能够正确识别。这些规则是:

  • 必须包括基本文件名,例如"messages"。
  • 语言和国家/地区代码是可选的,例如"_en_US"表示英语(美国)。

Java将首先查找与给定Locale完全匹配的资源文件,然后回退到默认资源文件。所有的配置文件必须位于classpath中,通常放在resources目录下。

4. 演示Java国际化

第一步 创建子模块spring6-i18n,

image-20240102213056426

引入spring依赖

<dependencies><!--spring context依赖--><!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.2</version></dependency><!--spring对junit的支持相关依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>6.0.2</version></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.0</version></dependency><!--log4j2的依赖--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.19.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j2-impl</artifactId><version>2.19.0</version></dependency><!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>

第二步 在resource目录下创建两个配置文件:messages_zh_CN.properties和messages_en_GB.properties

image-20240102214429860

第三步 测试

public static void main(String[] args) {//  1. 通过指定Locale来获取资源文件System.out.println(ResourceBundle.getBundle("messages",new Locale("en", "GB")).getString("test"));//  2. 通过指定Locale来获取资源文件System.out.println(ResourceBundle.getBundle("messages",new Locale("zh", "CN")).getString("test"));}

image-20240102214533013

3、Spring6国际化

3.1 MessageSource接口

Spring框架支持国际化通过MessageSource接口来实现,这允许您在应用程序中轻松管理多语言和本地化资源。

常见实现类

  1. ResourceBundleMessageSource

ResourceBundleMessageSource是一个常见的MessageSource实现,它基于Java的ResourceBundle基础类。它允许您仅通过资源名加载国际化资源。这意味着您可以将不同语言版本的资源存储在不同的属性文件中,并根据需要加载它们。

  1. ReloadableResourceBundleMessageSource

ReloadableResourceBundleMessageSourceResourceBundleMessageSource类似,但它提供了一个额外的功能,即定时刷新。这允许您在不重启应用程序的情况下更新资源信息。这对于需要经常更新本地化内容的应用程序非常有用。

  1. StaticMessageSource

StaticMessageSource是另一个MessageSource实现,它允许您通过编程的方式提供国际化信息。这意味着您可以在代码中动态添加和管理本地化消息,甚至从数据库中提取国际化信息。这对于需要动态管理本地化内容的情况非常有用。

通过使用这些不同的MessageSource实现,Spring框架使国际化在应用程序中变得更加灵活和可定制。我们可以选择最适合您项目需求的实现来管理多语言和本地化资源,以提供更好的用户体验。

3.2 使用Spring6国际化

第一步 创建资源文件

国际化文件命名格式:基本名称 _ 语言 _ 国家.properties

image-20240103195605660

messages_en_GB.properties

test=welcome {0},时间:{1}

messages_zh_CN.properties

test=welcome {0},时间:{1}

解释:{0},{1}这样内容,就是动态参数

第二步 创建spring配置文件,配置MessageSource

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置国际化资源文件 --><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>
</beans>

image-20240103200428447

第三步 创建测试类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Date;
import java.util.Locale;public class Demo2 {public static void main(String[] args) {// 1. 加载Spring配置文件,根据创建对象ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");// 传递动态参数,使用数组形式对应{0} {1}顺序Object[] objs = new Object[]{"test", new Date().toString()};//test为资源文件的key值,//objs为资源文件value值所需要的参数,Local.CHINA为国际化为语言String str = context.getMessage("test", objs, Locale.CHINA);System.out.println(str);}
}

image-20240103200455139

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

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

相关文章

2.6 KERNEL LAUNCH

图2.15在vecAdd函数中显示最终主机代码。此源代码完成了图2.6.中的骨架。2.12和2.15共同说明了一个简单的CUDA程序&#xff0c;该程序由主机代码和设备内核组成。该代码是硬接的&#xff0c;每个线程块使用256个线程。然而&#xff0c;使用的线程块的数量取决于向量&#xff08…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以…

【C++】- 类和对象(!!C++类基本概念!this指针详解)

类和对象 引入类类的定义类的访问限定操作符类的作用域类的实例化类对象模型this指针 引入类 在 C中&#xff0c;引入了一个新的定义----------类。类是一种用户自定义的数据类型&#xff0c;用于封装数据和行为。类可以看作是一个模板或蓝图&#xff0c;描述了一组相关的数据和…

Android 集成vendor下的模块

Android 集成vendor下的模块 &#xff0c;只需要在 PRODUCT_PACKAGES 加上对应的模块名&#xff0c;编译的时候就会执行对应模块的bp文件&#xff0c;集成到系统中 PRODUCT_PACKAGES \WallpaperPicker \Launcher3 \com.nxp.nfc Android11 Framework Vendor下自定义系统…

SpringBoot 如何 返回页面

背景 RestController ResponseBody Controller Controller中的方法无法返回jsp页面&#xff0c;或者html&#xff0c;配置的视图解析器 InternalResourceViewResolver不起作用&#xff0c;返回的内容就是Return 里的内容。 Mapping ResponseBody 也会出现同样的问题。 解…

nginx访问路径匹配方法

目录 一&#xff1a;匹配方法 二&#xff1a;location使用: 三&#xff1a;rewrite使用 一&#xff1a;匹配方法 location和rewrite是两个用于处理请求的重要模块&#xff0c;它们都可以根据请求的路径进行匹配和处理。 二&#xff1a;location使用: 1&#xff1a;简单匹配…

SSH 密钥身份验证和管理

安全外壳协议&#xff08;Security Shell Protocol&#xff09;是一种应用于计算机网络的安全通信协议&#xff0c;其提供的服务可用于保护网络上的连接和数据传输安全性&#xff0c;其核心思想是为网络上的两台计算机之间搭建一个安全的外壳&#xff0c;以保护数据传输的安全性…

Python中的装饰器

顾名思义&#xff0c;函数装饰器就是对这个函数进行了装饰&#xff0c;比如在函数的前后进行日志打印等。在Python中&#xff0c;装饰器是一种特殊的语法&#xff0c;用于简化函数或方法的定义和调用。装饰器允许你在不修改原始函数代码的情况下&#xff0c;通过在其上应用装饰…

Ubuntu本地快速搭建web小游戏网站,公网用户远程访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

css文本溢出处理——单行、多行

日常开发中&#xff0c;经常会遇到需要展示的文本过长&#xff0c;这种情况下&#xff0c;为了提高用户的使用体验&#xff0c;最常见的处理方式就是把溢出的文本显示成省略号。 处理文本的溢出的方式&#xff1a;1&#xff09;单行文本溢出&#xff1b; 2&#xff09;多行文本…

TIA Portal 各版本安装指南

TIA Portal下载链接 https://pan.baidu.com/s/1Jat53vGz1rXfLm7kTldz-Q?pwd0531 1.鼠标右击【TIA portal V19 (64bit)】压缩包&#xff08;先点击“显示更多选项”&#xff09;选择【解压到 TIA portal V19 (64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【NoRestart…

Hive实战:分科汇总求月考平均分

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建分区的学生成绩表4、按分区加载数据5、查看分区…

系统学英语 — 音标音节 — 能读就能写

目录 文章目录 目录概览12 个单元音8 个双元音28 个辅音音节 概览 音标发音器&#xff1a;https://en-yinbiao.xiao84.com/biao/ 12 个单元音 序号发音音标助记字母组合备注1拖长音 前元音[i:]eate、ea、ee、ie2短促音 前元音[i]bige、i、y3拖长音 后元音[a:]aska、ar4短促…

完善 Golang Gin 框架的静态中间件:Gin-Static

Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架&#xff0c;但是生态中的 Static 中间件使用起来却一直很不顺手。 所以&#xff0c;我顺手改了它&#xff0c;然后把这个改良版开源了。 写在前面 Gin-static 的改良版&#xff0c;我开源在了 soulteary/gin-static&a…

【开源】基于JAVA语言的服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

STM32之模拟IIC总线控制SHT20温湿度芯片

一、IIC总线概述 1、IIC总线介绍 I2C (Inter&#xff0d;Integrated Circuit)总线产生于在80年代&#xff0c; 由PHILIPS公司开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备, 最初为音频和视频设备开发。I2C总线两线制包括&#xff1a;串行数据SDA&#xff08…

Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行

环境: Rustdesk1.19 问题描述: Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行 解决方案: 1.查看源代码 pub async fn start_all() {crate::hbbs_http::sync::start();let mut nat_tested = false;check_zombie()

银行十大主题域

当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道 便于记忆&#xff1a; 银行是一个企业&#xff0c;同时也是一个机构&#xff0c;涉及企业机构就会有资产&#xff0c;财务的存在&#xff0c;银行有自己的产品&#xff08;信用卡&#xff0c;黄金&#xff0c;期…

【小沐学CAD】开源Assimp库导入三维模型(C++、Python)

文章目录 1、简介2、下载编译3、代码测试3.1 C3.2 pyassimp&#xff08;Python&#xff09; 结语 1、简介 https://github.com/assimp/assimp Open Asset Import Library 是一个库&#xff0c;用于将各种 3D 文件格式加载为共享的内存格式。它支持 40 多种用于导入的文件格式和…

PDF.js实现搜索多个不同的关键词高亮显示效果

static\PDF\web\viewer.js 392行左右 // 自定义搜索关键词---------------------------------------- this.searchKeywords = keyword => {if (typeof PDFViewerApplication !== undefined) {PDFViewerApplication.eventBus.dispatch(find, {query: keyword,caseSensitive:…