ResourceBundle使用详解

ResourceBundle使用详解

这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现本地化。比如对于“取消”,中文中我们使用“取消”来表示,而英文中我们使用“cancel”。若我们的程序是面向国际的(这也是软件发展的一个趋势),那么使用的人群必然是多语言环境的,实现国际化就非常有必要。而ResourceBundle可以帮助我们轻松完成这个任务:当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包(大多数情况下也就是.properties文件)中加载它。这样可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(即便不是全部)特定于语言环境的信息隔离开来。

这使编写的程序可以:

轻松地本地化或翻译成不同的语言

一次处理多个语言环境

以后可以轻松进行修改,以便支持更多的语言环境

说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

使用这个类,properties需要遵循一定的命名规范,一般的命名规范是: 自定义名语言代码国别代码.properties,如果是默认的,直接写为:自定义名.properties。

比如:

myres_en_US.properties

myres_zh_CN.properties

myres.properties

当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。

没有提供语言和地区的资源文件是系统默认的资源文件。

资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

ResourceBundle的类层次结构

PropertyResourceBundle将本地化的文本存储于Java property文件中。

从ResourceBundle中获取值

获取ResourceBundle实例后可以通过下面的方法获得本地化值。

getObject(String key);

getString(String key);

getStringArray(String key);

还可以通过keySet()方法获取所有的key。Set keys = bundle.keySet();

其它ResourceBundle 方法可以通过查看文档获得。

测试及验证

新建4个属性文件

my_en_US.properties:cancelKey=cancel

my_zh_CN.properties:cancelKey=\u53D6\u6D88(取消)

my_zh.properties:cancelKey=\u53D6\u6D88zh(取消zh)

my.properties:cancelKey=\u53D6\u6D88default(取消default)

获取bundle

ResourceBundle bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN"));

1

其中new Locale(“zh”, “CN”)提供本地化信息,上面这行代码,程序会首先在classpath下寻找my_zh_CN.properties文件,若my_zh_CN.properties文件不存在,则取找my_zh.properties,如还是不存在,继续寻找my.properties,若都找不到就抛出异常。

代码

import javax.annotation.Resource;

import java.util.Locale;

import java.util.ResourceBundle;

public class Main {

public static void main(String args[]) {

ResourceBundle bundle = ResourceBundle.getBundle("my", new Locale("zh", "CN"));

String cancel = bundle.getString("cancelKey");

System.out.println(cancel);

bundle = ResourceBundle.getBundle("my", Locale.US);

cancel = bundle.getString("cancelKey");

System.out.println(cancel);

bundle = ResourceBundle.getBundle("my", Locale.getDefault());

cancel = bundle.getString("cancelKey");

System.out.println(cancel);

bundle = ResourceBundle.getBundle("my", Locale.GERMAN);

cancel = bundle.getString("cancelKey");

System.out.println(cancel);

bundle = ResourceBundle.getBundle("my");

for (String key : bundle.keySet()) {

System.out.println(bundle.getString(key));

}

}

}

输出结果

取消

cancel

取消

取消

取消

说明:前面三个分别按照zh_CN,US,默认的结果输出,第四个由于我们未定义GERMAN属性文件,这时ResourceBundle为我们提供了一个fallback(也就是一个备用方案),这个备用方案就是根据当前系统的语言环境来得到的本地化信息。所以若是找不到GERMAN的,之后就会去找CHINA了,所以找到了res_zh_CH.properties这个资源包。最后一个是若有多个属性文件,可以按照Map的形式遍历,获得属性文件内的各个值。
 

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

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

相关文章

【小白专用】MySQL入门(详细总结)

3. 创建数据库 使用 create database 数据库名; 创建数据库。 create database MyDB_one; create database DBAliTest; 创建数据库成功后,数据库的数量变成了6个,多了刚才创建的 dbalitest 。 4. 创建数据库时设置字符编码 使用 create database 数据…

YouTube网红营销:出海品牌扩大影响力的关键

随着数字媒体的兴起,社交媒体已成为品牌与消费者之间建立联系的重要桥梁。其中,YouTube作为全球最大的视频分享平台,不仅拥有庞大的用户群体,还聚集了众多有影响力的网红。这些网红在各自的领域内拥有强大的话语权和号召力&#x…

MySQL数据库,初学SQL知识点引入

数据库的相关概念: DB:数据库(Database): 即存储数据的仓库,其本质是一个文件系统。保存了一系列有组织的数据。 DBMS:数据库管理系统(Database Management System)&…

董明珠:格力从制造商到自主创新企业的转变之路

中国制造业的崛起是近几十年来全球经济舞台上最显著的事件之一,而格力电器作为中国制造业的代表之一,其漫长而坚定的自主创新之路,将其从一家传统的制造商转变为一个自主创新的企业,是中国制造业发展历程中的一个亮点。本文将探讨…

虚拟化之指令的Trap和仿真

有时,虚拟机监控程序需要在虚拟机(VM)中模拟操作。例如,VM内的软件可能尝试配置与功耗管理或缓存一致性相关的低级处理器控件。通常,您不希望将VM直接访问这些控件,因为它们可能被用于突破隔离,或影响系统中的其他VM。 trap在执行给定操作(例如读取寄存器)时引发异常…

2023年全国职业院校技能大赛-大数据应用开发-数据可视化

可视化题目与以往相同,做法类似,我这里展示得到语句后处理优化以后的代码,以函数式来写可视化,比以前400-500多行代码简洁到100多行。其他题目见本栏目,那里面的代码都是没有优化后的,这次主要以效率和精简…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis查询中返回值四种情况

第一章 Mybatis查询中返回值四种情况 1.1 查询单行数据返回单个对象 /*** 通过id获取员工信息*/ public Employee selectEmpById(int empId);<select id"selectEmpById" resultType"employee">SELECTid,last_name,email,salaryFROMtbl_employeeWHE…

Backend - Django JsonResponse HttpResponse

目录 一、关系 二、使用 &#xff08;一&#xff09;data 字典传值 1. HttpResponse &#xff08;1&#xff09;写法 &#xff08;2&#xff09;前端接收 HttpResponse 回传的值 2. JsonResponse &#xff08;1&#xff09;写法 &#xff08;2&#xff09;前端接收 Js…

如何解压没有密码的7-zip文件?

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

文件重命名大师:批量修改名称的终极指南

在处理大量文件时&#xff0c;我们往往需要修改它们的名称。无论是为了整理、归档还是为了满足某种特定需求&#xff0c;重命名文件都是一项常见的任务。然而&#xff0c;手动一个一个地修改文件名无疑是一项耗时且容易出错的工作。幸运的是&#xff0c;我们可以借助一些强大的…

Python---类的综合案例

1、需求分析 设计一个Game类 属性&#xff1a; 定义一个类属性top_score记录游戏的历史最高分 定义一个实例属性player_name记录当前游戏的玩家姓名 方法&#xff1a; 静态方法show_help显示游戏帮助信息 类方法show_top_score显示历史最高分 实例方法start_game开始当前…

13、pytest为失败的断言定义自己的解释

官方实例 # content of ocnftest.py from test_foocompare import Foodef pytest_assertrepr_compare(op, left, right):if isinstance(left, Foo) and isinstance(right, Foo) and op "":return["Comparing Foo instances:",f" vals:{left.val} !…

震坤行走进中国移动电商平台业务推介启动会助力政企采购升级

震坤行走进中国移动电商平台业务推介启动会助力政企采购升级 7月19日&#xff0c;震坤行受邀参与中国移动供应链管理中心在北京举办的“和悦彩同行 创供赢未来”主题活动&#xff0c;走入客户一线面对面沟通&#xff0c;依托MRO领域服务能力为客户提供专业解决方案&#xff0c…

node后端接口无法插入数据为emoji的表情的问题

原因 emoji的表情一般是这样的\xF0\x9F\x98\x80或者是\xF0\x9F\x98 &#xff0c;事实上 一般数据库的utf8的编码类型都是能保存\xF0\x9F\x98 但是不能保存\xF0\x9F\x98\x80这种样的emoji&#xff0c;要将数据库编码格式为utf8mb4 也就是utf8的超集 另外&#xff0c;除了 数据库…

angular状态管理方案(ngrx)

完全基于redux的ngrx方案&#xff0c;我们看看在angular中如何实现。通过一个简单的计数器例子梳理下整个流程 一 安装 &#xff1a;npm i ngrx/store 这里特别要注意一点&#xff1a;安装 ngrx/store的时候会出现和angular版本不一致的问题 所以检查一下angular/core的版本…

使用 HPA 和 TopologySpreadConstraints 实现可用区间等比扩容

1. 原理介绍 设置 HPA 每次最小扩容 Pod 数为可用区数量&#xff0c;以期可用区间 Pod 同步扩容设置 TopologySpreadConstraints 可用区分散 maxSkew 为 1&#xff0c;以尽可能可用区间 Pod 均匀分布 2. 实验验证 2.1. 准备 Kind 集群 准备如下配置文件&#xff0c;命名为 …

软件测试面试题及答案解析

在软件测试领域&#xff0c;面试是求职者进入这个行业的重要途径。为了帮助大家更好地应对软件测试面试&#xff0c;本文将为大家提供一些常见的软件测试面试题及答案解析。 请简要介绍一下软件测试的目的和重要性。 答&#xff1a;软件测试的目的是确保软件产品的质量&#…

千问模型测试环境配置

配置千问环境比较顺利&#xff0c;有些由于速度问题较慢&#xff0c;添加源之后提速很多&#xff0c;记录如下&#xff1a; 1.创建虚拟环境 conda create -p /datanas3/chenjing/envs/qwen python3.8 2.激活虚拟环境 conda activate /datanas3/chenjing/envs/qwen 3.添加源 co…

“身份证信息批量核验:高效解决管理难题,轻松提升工作效率“

尊敬的读者们&#xff0c;您是否曾经因为身份证信息的核验而感到烦恼&#xff1f;是否曾经因为手动核验而感到繁琐和耗时&#xff1f;现在&#xff0c;我们向您介绍一款全新的工具——身份证信息批量核验器&#xff0c;它将帮助您一键解决管理难题&#xff0c;让工作事半功倍&a…

尝试通过AI模型进行简单的编码

一、前言 最近尝试通过AI来编程&#xff0c;总体感觉还是能处理写简单的问题&#xff0c;复杂的问题目前还是无法解决。主要的痛点还是数据噪音&#xff0c;就是AI永远不会承认它不会&#xff0c;它会给你的一个错误的信息&#xff0c;它也不会告诉你你的问题它暂时无法完整正…