国际化(i18n)

news2025/2/24 21:02:36

国际化(i18n)

概述

i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。在信息技术领域,国际化与本地化(英文:internationalization and localization)是指修改软件使之能适应目标市场的语言、地区差异以及技术需要。

java国际化

java自身支持国际化

java.util.Local用于指定当前用户所属的语言环境等信息,Local包含了language信息和country信息。
java.util.ReourceBundle用于查找绑定对应的资源文件。

配置文件命名规则

basenaem_language_country.properties
必须遵循命名规则,java才会识别

basename是必须的,语言和国家是可选的。
如果同时提供了context.propertiescontext_zh_CN.propertes两个配置文件,提供的locale符合en_CN,那么优先查找messages_en_CN.propertes配置文件,如果没查找到,再查找messages.properties配置文件。
所有的配置文件必须放在classpath中,一般放在resources目录下。

实例

在这里插入图片描述

测试

@Test
public void testCN() {
    ResourceBundle bundle = ResourceBundle.getBundle("local", new Locale("zh", "CN"));
    String value = bundle.getString("localName");
    System.out.println("value = " + value);
    /*value = China*/
}
@Test
public void testOther() {
    //"local"就是配置文件的basename
    ResourceBundle bundle1 = ResourceBundle.getBundle("local", new Locale("en", "US"));
    String value = bundle1.getString("localName");
    System.out.println("value = " + value);
    /*value = USA*/
}

Spring6国际化

Spring国际化是通过MessageSource接口来支持的。

MessageSource接口

常见实现类

ResourceBundleMessageSource:这是基于javaResourceBundle基础类实现,仅允许通过资源名加载国际化资源。
ReloadadabelResourceBundleMessageSource:它的功能和上面的类似,多了定时刷新功能,允许在不重启的情况下,更新资源。
StaticMessageSource:允许通过编程的方式提供国际化信息。

Spring6国际化使用

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

步骤

1、创建资源文件

在这里插入图片描述

message_zh_CN.properties

test=你好 {0}, 时间:{1}

message_en_US.properties

test=welcome {0}, time:{1}

{0}、{1}表示的是通过动态方式传递。

2、创建配置文件
<?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>message</value>
                </list>
            </property>
            <property name="defaultEncoding">
                <value>utf-8</value>
            </property>
        </bean>
</beans>
3、测试
@Test
public void testCN() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    Object[] obj = new Object[]{"khan", new Date().toString()};
    String value = context.getMessage("test", obj, Locale.CHINA);
    System.out.println("value = " + value);
    /*value = 你好 khan, 时间:Tue Jul 25 18:55:09 CST 2023*/
}
@Test
public void testUS() {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    Object[] obj = new Object[]{"louie", new Date().toString()};
    String value = context.getMessage("test", obj, Locale.US);
    System.out.println("value = " + value);
    /*value = welcome louie, time:Tue Jul 25 18:55:09 CST 2023*/
}

输出乱码解决

在这里插入图片描述

同时还需要将配置文件中的内容做修改,不然会因为修改编码后导致文件中变为乱码格式保留。

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

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

相关文章

STM32 互补PWM 带死区 HAL

1、设置PWM波频率100KHz&#xff0c;占空比50%&#xff0c;死区时间1us 2、 while 循环之前启动PWM HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //启动TIM1_CH1 PWM输出 HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);//启动TIM1_CH1N PWM输出 3、死区计算 DT_time…

基于Jquery EasyUI JSZip FileSaver的简单使用

一、前言 在前端的项目开发中 &#xff0c;下载文件压缩包是很重要的一个环节&#xff0c;那么怎么下载多个文件并压缩成ZIP下载呢&#xff1f; 二、使用步骤 1、引用库 <script type"text/javascript" src"~/Scripts/comm/jszip.min.js" ></…

draw.io画图时,用一个箭头(线段)连结一个矩形和直线时,发现,无论怎么调节,都无法使其无缝连接。

问题描述&#xff1a;draw.io画图时&#xff0c;用一个箭头&#xff08;线段&#xff09;连结一个矩形和直线时&#xff0c;发现&#xff0c;无论怎么调节&#xff0c;都无法使其无缝连接。要么少一段&#xff0c;如图1所示。要么多一段&#xff0c;如图2所示。 图1&#xff0c…

国标GB28181监控设备接入EasyCVR如何正确获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…

数据结构之优先级队列(堆)

文章目录 1.优先级队列概念 &#x1f4ae;2.优先级队列的模拟实现&#x1f4ae;3.常用接口PrinrityQueue介绍&#x1f4ae;4.堆的应用&#x1f4ae; 1.优先级队列概念 &#x1f4ae; 优先级队列 &#xff1a;是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优…

Linux —— 进程地址空间

目录 一&#xff0c;虚拟地址 二&#xff0c;进程地址空间 一&#xff0c;虚拟地址 #include<stdio.h> #include <unistd.h> #include <stdlib.h> int g_val 0; int main() {pid_t id fork();if(id<0) …

聊聊STM32的基本定时器

STM32 的基本定时器&#xff08;Basic Timer&#xff09;是一种简单的定时器模块&#xff0c;用于生成基于时钟频率的定时中断。它可以用于实现各种定时和计时功能&#xff0c;例如延时、频率测量、PWM 生成等。 基本定时器通常由一个 16 位的自由运行计数器和一个预分频器组成…

VMware InstallBuilder Crack

VMware InstallBuilder Crack VMware InstallBuilder是一种开发工具&#xff0c;用于构建桌面和服务器软件的跨平台安装程序。使用InstallBuilder&#xff0c;您可以从单个项目文件和构建环境中快速创建Linux、Windows、Mac OS X、Solaris和其他平台的动态专业安装程序。除了安…

虚拟机安装红帽8/9问题解决方案

虚拟机安装红帽8/9问题解决方案 导入虚拟机文件&#xff0c;开启虚拟机。 会直接进入Redhat Debug 此平台不支持虚拟化的 AMD-V/RVI。 不使用虚拟化的 AMD-V/RVI&#xff0c;是否继续? 解决方案&#xff1a; 首先确保PC是开启VT-x&#xff08;Inter&#xff09;&#xff0…

Docker Compose 实现单机容器集群编排管理

目录 Docker ComposeDocker Compose 三大概念1. Docker Compose 环境安装2. YAML 文件格式及编写注意事项3. Docker Compose配置restart 设置重启策略&#xff0c;no&#xff0c;always&#xff0c;no-failure&#xff0c;unless-stopped 4. Docker Compose 常用命令选项5. Doc…

消息队列(一)-- RabbitMQ入门(2)

发布确认 发布确认原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在该信道上面发布的消息都将会被指派一个唯一的 ID&#xff08;从1开始&#xff09;&#xff0c;一旦消息被投递到所有匹配的队列之后&#xff0c;broker 就会发…

蓝桥杯省赛真题——最少刷题数

2022年第13届省赛&#xff0c;蓝桥杯真题。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&…

【前端知识】React 基础巩固(三十三)——Redux的使用详解

React 基础巩固(三十三)——Redux的使用详解 Redux的使用详解 针对React 基础巩固&#xff08;三十二&#xff09;中的案例&#xff0c;我们希望抽取页面中共有的代码&#xff08;例如下方的代码&#xff09;&#xff0c;使用高阶组件统一拦截。 constructor() {super();this.…

Python入门【 for循环和可迭代对象遍历、嵌套循环和综合练习、continue语句、else语句、循环代码优化】(八)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

两个数组的dp问题(2)--动态规划

一)交错字符串: 97. 交错字符串 - 力扣&#xff08;LeetCode&#xff09; 一)确定一个状态标识: 如果我选择s1的一段区间&#xff0c;再进行选择s2得一段区间那么s3这个字符串的长度就已经固定了 预处理:在s1字符串s2字符串和s3字符串前面加上一个虚拟字符&#xff0c;让下标从…

力扣热门100题之最小覆盖子串【困难】【滑动窗口】

题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。…

java项目之人才公寓管理系统(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的人才公寓管理系统。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

JVM-提问纯享版

一、内存区域 介绍下 Java 内存区域&#xff08;运行时数据区&#xff09;内存分配方式内存分配并发问题对象的访问定位的两种方式&#xff08;句柄和直接指针两种方式&#xff09; 二、垃圾回收 如何判断对象是否死亡&#xff08;两种方法&#xff09;。简单的介绍一下强引…

Web3教程| 什么是地址监控?如何使用地址监控追踪黑客地址?

在当今Web3世界里&#xff0c;保护个人资产安全至关重要。据报道在2023年上半年&#xff0c;Web3领域因黑客攻击事件造成的损失高达4.794亿美元。 此外&#xff0c;10多个公链遭受黑客攻击&#xff0c;其中以太坊链遭受的损失最多&#xff0c;约为2.87亿美元。这些黑客的存在迫…

maven配置下载源

有得时候项目中会配置默认的谷歌作为源下载依赖这样会导致下载很慢&#xff0c;我们可以将谷歌的源更改为国内的阿里源&#xff0c;这样下载就会比较快 查看pom.xml文件 若是在配置时没有指定该依赖的下载源的话&#xff0c;就是默认去谷歌源下载&#xff0c;这时我们在项目po…