Spring之国际化:i18n

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

文章目录

  • 前言
  • 一、i18n概述
  • 二、Java国际化
  • 三、Spring6国际化
    • 1、MessageSource接口
    • 2、使用Spring6国际化
  • 总结


前言

一、i18n概述
二、Java国际化
三、Spring6国际化
1、MessageSource接口
2、使用Spring6国际化


一、i18n概述

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

二、Java国际化

(1)Java自身是支持国际化的,java.util.Locale用于指定当前用户所属的语言环境等信息,java.util.ResourceBundle用于查找绑定对应的资源文件。Locale包含了language信息和country信息,Locale创建默认locale对象时使用的静态方法:

    /*** This method must be called only for creating the Locale.** constants due to making shortcuts.*/private static Locale createConstant(String lang, String country) {BaseLocale base = BaseLocale.createInstance(lang, country);return getInstance(base, null);}

(2)配置文件命名规则:
basename_language_country.properties
必须遵循以上的命名规则,java才会识别。其中,basename是必须的,语言和国家是可选的。这里存在一个优先级概念,如果同时提供了messages.properties和messages_zh_CN.propertes两个配置文件,如果提供的locale符合en_CN,那么优先查找messages_en_CN.propertes配置文件,如果没查找到,再查找messages.properties配置文件。最后,提示下,所有的配置文件必须放在classpath中,一般放在resources目录下

(3)实验:演示Java国际化

第一步 创建子模块spring6-i18n,引入spring依赖
在这里插入图片描述
第二步 在resource目录下创建两个配置文件:messages_zh_CN.propertes和messages_en_GB.propertes
在这里插入图片描述
第三步 测试

package com.atguigu.spring6.javai18n;import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.ResourceBundle;public class Demo1 {public static void main(String[] args) {System.out.println(ResourceBundle.getBundle("messages",new Locale("en","GB")).getString("test"));System.out.println(ResourceBundle.getBundle("messages",new Locale("zh","CN")).getString("test"));}
}

三、Spring6国际化

1、MessageSource接口

spring中国际化是通过MessageSource这个接口来支持的

常见实现类

ResourceBundleMessageSource

这个是基于Java的ResourceBundle基础类实现,允许仅通过资源名加载国际化资源

ReloadableResourceBundleMessageSource

这个功能和第一个类的功能类似,多了定时刷新功能,允许在不重启系统的情况下,更新资源的信息

StaticMessageSource

它允许通过编程的方式提供国际化信息,一会我们可以通过这个来实现db中存储国际化信息的功能。

2、使用Spring6国际化

第一步 创建资源文件

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

{0},{1}这样内容,就是动态参数
在这里插入图片描述
(1)创建atguigu_en_US.properties

www.atguigu.com=welcome {0},时间:{1}

(2)创建atguigu_zh_CN.properties

www.atguigu.com=欢迎 {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>atguigu</value></list></property><property name="defaultEncoding"><value>utf-8</value></property></bean>
</beans>

第三步 创建测试类

package com.atguigu.spring6.javai18n;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Date;
import java.util.Locale;public class Demo2 {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//传递动态参数,使用数组形式对应{0} {1}顺序Object[] objs = new Object[]{"atguigu",new Date().toString()};//www.atguigu.com为资源文件的key值,//objs为资源文件value值所需要的参数,Local.CHINA为国际化为语言String str=context.getMessage("www.atguigu.com", objs, Locale.CHINA);System.out.println(str);}
}

总结

以上就是Spring之国际化:i18n的相关知识点,希望对你有所帮助。
积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

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

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

相关文章

Jupyter Notebook的安装及在网页端和VScode中使用教程(详细图文教程)

目录 一、Jupyter Notebook1.1 组成组件1.2 优点1.3 常规用途 二、安装及使用2.1 网页端2.1.1 安装Jupyter Notebook2.1.2 检验是否安装成功2.1.3 启动Jupyter Notebook2.1.4 使用Jupyter Notebook 2.2 VScode中安装及使用2.2.1 安装Jupyter2.2.2 使用Jupyter 三、常用命令3.1 …

PaddleOCR 的使用,极简介绍

安装 参考github的官网就可以&#xff1a; github链接 简单的说&#xff0c;就是两句话&#xff1a; python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple pip install "paddleocr>2.0.1" # 推荐使用2.0.1版本 Python下的使用…

[环境配置]win10关闭病毒和威胁防护防止乱删软件

搜索栏输入病毒和威胁即可看到 如果没有搜到您可以从菜单栏进到到Windows设置 选择更新和安全 点击后进到windows安全中心&#xff0c;随后进到到病毒和威胁防护 关闭所有选项

软件测试必问的33个面试题

1.你为什么选择软件测试行业 因为之前有了解软件测试这个行业&#xff0c;觉得他的发展前景很好。 2.根据你以前的工作经验描述一下软件开发、测试过程&#xff0c;由那些角色负责&#xff0c;你做什么 要有架构师、开发经理、测试经理、程序员、测试员。我在里面主要是负责所…

避免大M取值过大引起的数值问题

在数学建模当中&#xff0c;常常会见到大M法&#xff0c;它之所以叫大M法&#xff0c;是因为它涉及到一个&#xff08;绝对值&#xff09;较大的系数M&#xff0c;这个大M的值应大于约束中的连续变量或者约束表达式可能取到的任何合理值&#xff0c;M值取过大往往会造成优化问题…

Git 分布式版本控制系统(序章1)

第一章 Git 分布式版本控制系统 为什么学Git? 某些企业面试需要掌握Git&#xff0c;同时&#xff0c;也方便管理自己的Qt项目。 一、Git 客户端下载&#xff08;Windows&#xff09; 下载地址 https://gitee.com/all-about-git#git-%E5%A4%A7%E5%85%A8 二、Git 的特点 分支…

什么是TSDF三维建图,SLAM中的TSDF建图如何实现的

目录 TSDF的基本原理 SLAM中TSDF建图的实现 TSDF的基本原理 TSDF建图&#xff0c;即使用截断符号距离函数&#xff08;Truncated Signed Distance Function&#xff09;的建图方法&#xff0c;是一种用于3D重建和机器人导航的技术。TSDF利用所谓的“截断有符号距离函数”来构…

自动驾驶中的“雷达”

自动驾驶中有好几种雷达&#xff0c;新手可能会蒙蔽&#xff0c;这里统一介绍一下它们。 首先&#xff0c;所有雷达的原理都是发射波&#xff0c;接收回波&#xff0c;并通过发射和接收的时间差以及波的速度计算距离。只不过发射的波不同&#xff0c;功能也不同。 激光雷达 …

unity HoloLens2开发,使用Vuforia识别实体 触发交互(二)(有dome)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、打包到HoloLens二、Vuforia相关1.配置识别框2.制作一个半透明识别框&#xff1a;3.设置如下4.问题 四 HoloLens2 问题总结 前言 我使用的utniy 版本&#xff1a;Unity 2021.3…

广州华锐互动VRAR:VR安全模拟驾驶让顾客身临其境感受真实试驾体验

随着科技的不断发展&#xff0c;汽车行业也在不断地进行创新。从电动汽车到自动驾驶&#xff0c;再到如今的虚拟现实技术&#xff0c;汽车行业的未来充满了无限的可能性。而在这些创新中&#xff0c;VR安全模拟驾驶无疑是最具吸引力的一项。通过戴上一副虚拟现实眼镜&#xff0…

本机ping不通虚拟机

windows下finall shell连不上虚拟机了&#xff0c;之前是可以的&#xff0c;然后ping虚拟机&#xff0c;发现也ping不通&#xff0c;随后到处找问题。 在本地部分&#xff0c;控制面板 ——>网络和Internet——>网络连接 &#xff0c; 可以看到 VMnet1和Vmnet8虽然都是已…

取证练习(一)PC+手机,服务器未完

链接&#xff1a;https://pan.baidu.com/s/1KlkPwzWm7dNO2iRGoTsE7Q?pwdxyxy 提取码&#xff1a;xyxy –来自百度网盘超级会员V3的分享 每道题5分&#xff0c;共计200 一、请检查窝点中的手机检材&#xff0c;回答以下问题 1、 该OPPO手机的IMEI是&#xff1a; A. 8603700…

Python爬虫的作用及工具和反爬机制,爬虫新手入门篇

文章目录 一 什么是爬虫二 爬虫工具三. 反爬虫问题Python爬虫技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与全职路线 一 什么是爬虫 爬虫能做什么 政治角逐 2016年这场美国总统竞…

选择激光打标机:为您的产品增添独特标识

激光打标机是一种高科技的打标设备&#xff0c;以其独特的标记效果和精度&#xff0c;逐渐成为了工业制造领域中不可或缺的一部分。选择激光打标机&#xff0c;不仅可以为您的产品增添独特的标识&#xff0c;还可以提升品牌形象&#xff0c;增强产品附加值。 一、激光打标机的独…

如何使用内网穿透工具实现Java远程连接本地Elasticsearch搜索分析引擎

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…

光伏制氢:技术前沿与未来展望

光伏制氢&#xff1a;技术前沿与未来展望 一、引言 随着全球对可再生能源需求的日益增长&#xff0c;光伏制氢技术作为一种将太阳能转化为氢能的有效方式&#xff0c;正逐渐受到人们的关注。通过光伏发电和电解水相结合&#xff0c;我们可以将丰富的太阳能资源转化为清洁的氢…

腾讯混元、阿里通义千问成功通过中国首个“大模型标准符合性评测”

通义千问官网链接&#xff1a;通义通义&#xff0c;阿里云大模型的统一品牌&#xff0c;覆盖语言、听觉、多模态等领域&#xff0c;致力于实现类人智慧的通用智能。不仅有语言模型产品通义千问和文生图模型产品通义万相&#xff0c;也有基于通义大模型的通义听悟、通义灵码、通…

Python 中 key 参数的含义及用法

哈喽大家好&#xff0c;我是咸鱼 我们在使用 sorted() 函数的时候&#xff0c;都会看到里面有一个 key 参数 其实这个 key 参数也存在于其他内置函数中&#xff08;例如 min()、max() 等&#xff09;&#xff0c;那么我们今天就来了解一下 key 参数的含义以及用途吧&#xff…

vim 撤销和恢复

前言 vim 的撤销与恢复老是忘了快捷键&#xff0c;就记录一下 撤销 在命令模式&#xff08;按ESC进入&#xff09;下&#xff1a; 快捷键 u 恢复 在命令模式&#xff08;按ESC进入&#xff09;下&#xff1a; 快捷键 Ctrl r