ResourceBundle
ResourceBundle
这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现本地化。比如对于“取消”,中文中我们使用“取消”来表示,而英文中我们使用“cancel”。若我们的程序是面向国际的(这也是软件发展的一个趋势),那么使用的人群必然是多语言环境的,实现国际化就非常有必要。而ResourceBundle可以帮助我们轻松完成这个任务:当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包(大多数情况下也就是.properties文件)中加载它。这样可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(即便不是全部)特定于语言环境的信息隔离
案例
新建资源文件。资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.
my_en_US.properties:cancelKey=cancelmy_zh_CN.properties:cancelKey=\u53D6\u6D88(取消)my_zh.properties:cancelKey=\u53D6\u6D88zh(取消zh)my.properties:cancelKey=\u53D6\u6D88default(取消default)
ResourceBundle resourceBundle = ResourceBundle.getBundle("my",Locale.getDefault());String cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my", new Locale("zh", "CN"));cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my", Locale.US);cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my", Locale.GERMAN);cancelKey = resourceBundle.getString("cancelKey");System.out.println(cancelKey);resourceBundle = ResourceBundle.getBundle("my");for (String key : resourceBundle.keySet()) {System.out.println(resourceBundle.getString(key));}//前面三个分别按照zh_CN,US,默认的结果输出,// 第四个由于我们未定义GERMAN属性文件,这时ResourceBundle为我们提供了一个fallback(也就是一个备用方案),// 这个备用方案就是根据当前系统的语言环境来得到的本地化信息。// 所以若是找不到GERMAN的,之后就会去找CHINA了,所以找到了res_zh_CN.properties这个资源包。// 最后一个是若有多个属性文件,可以按照Map的形式遍历,获得属性文件内的各个值。
参考:JAVA中ResourceBundle使用详解_OovEver的博客-CSDN博客_resourcebundle
ListResourceBundle
ListResourceBundle是ResourceBundle的一个抽象子类,它使用List来管理区域设置的资源
案例
1.创建资源类,继承ListResourceBundle,重写getContents()方法。
在在src根目录下,即default包下面下创建三个文件,MyResource.java、MyResource_zh_CN.java、MyResource_en_US.java,必须在根目录下,不然加载不到。
public class MyResource extends ListResourceBundle {Object[][] data = new Object[][]{{"cancel", "取消default"}};@Overrideprotected Object[][] getContents() {return data;}
}
public class MyResource_zh_CN extends ListResourceBundle {Object[][] data = new Object[][]{{"cancel", "取消"}};@Overrideprotected Object[][] getContents() {return data;}
}
public class MyResource_en_US extends ListResourceBundle {Object[][] data = new Object[][]{{"cancel", "cancel"}};@Overrideprotected Object[][] getContents() {return data;}
}
2.测试
public class MyResourceTest {public static void main(String[] args) {// 没有Local.GERMAN对应的区域配置文件,会根据当前系统的区域设置(Local.CHINA)来加载配置文件,// 由于没有Resource_zh_CN的配置文件,所以会加载默认的配置文件MyResource// MyResource里 cancel = 取消defaultResourceBundle bundle = ResourceBundle.getBundle("MyResource", Locale.GERMAN);String cancel = bundle.getString("cancel");System.out.println(cancel);// 增加 Resource_zh_CN的配置,再次运行,发现输出内容为Resource_zh_CN里的内容 cancel = 取消}
}
PropertyResourceBundle
PropertyResourceBundle是ResourceBundle的一个子类。
当我们通过.properties文件定义资源时,ResourceBundle.getBundle()创建的就是PropertyResourceBundle实例,来加载Properties文件获取属性值的。
Properties
Properties类表示一组持久的属性。属性可以保存到流中,也可以从流中加载。
属性列表中的每个键及其对应的值都是一个字符串。
案例
加载resource目录下的my.properties文件,读取文件中的属性
public class PropertiesTest {public static void main(String[] args) throws IOException {// 加载资源文件Properties properties = new Properties();InputStream stream = PropertiesTest.class.getClassLoader().getResourceAsStream("my.properties");properties.load(stream);System.out.println(properties);// getProperty(key)方法如果没有找到属性key,则返回nullString cancel = properties.getProperty("key");System.out.println(cancel);// getProperty(key,defaultValue)如果没有找到属性key,则返回defaultValueString property = properties.getProperty("key", "value");System.out.println(property);// 获取所有属性名Enumeration<?> propertyNames = properties.propertyNames();while (propertyNames.hasMoreElements()) {Object key = propertyNames.nextElement();System.out.println("属性名:" + key);}Set<String> strings = properties.stringPropertyNames();for (String keyName : strings) {System.out.println("属性名:" + keyName);}// 打印属性和属性值,通常用于调试PrintStream printStream = System.out;properties.list(printStream);}
}
ResourceBundle相关推荐
- java.util.ResourceBundle使用详解
为什么80%的码农都做不了架构师?>>> 2009-07-29 00:47:17 一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序 ...
- 使用ResourceBundle加载properties文件
使用ResourceBundle加载properties文件 @(JAVA)[java] 1.ResourceBundle介绍 说的简单点,这个类的作用就是读取资源属性文件(properties),然 ...
- ResourceBundle的路径问题
來源:http://www.diybl.com/course/3_program/java/javajs/200862/119502.html System.out.println(System.ge ...
- java resourcebundle_Java - Properties和ResourceBundle类学习
一.前言 在项目的开发过程中,为了统一配置的管理,我们经常需要将一些配置信息根据环境的不同,配置在不同的properties中,然后从里面进行读取.而Properties类作为最基础也是最经常使用的类 ...
- java bundle_java.util.ResourceBundle国际化用法详解
初识国际化和ResourceBundle 这个类主要用来解决国际化和本地化问题.国际化和本地化可不是两个概念,两者都是一起出现的.可以说,国际化的目的就是为了实现本地化,详细的介绍可以看本文的最后.比 ...
- Java ResourceBundle keySet()方法及示例
ResourceBundle类keySet()方法 (ResourceBundle Class keySet() method) keySet() method is available in jav ...
- java国际化bundle_Java国际化(i18n)ResourceBundle类
ResourceBundle类用于存储区域设置敏感的文本和对象. 通常使用属性文件来存储特定于语言环境的文本,然后使用ResourceBundle对象来表示它们. 以下是在基于Java的应用程序中使用 ...
- Java ResourceBundle getLocale()方法与示例
ResourceBundle类的getLocale()方法 (ResourceBundle Class getLocale() method) getLocale() method is availa ...
- java方法参数Bundle,Java ResourceBundle keySet()方法及示例
ResourceBundle类keySet()方法keySet()方法在java.util包中可用. keySet()方法用于从此ResourceBundle及其超级捆绑包中获取所有现有键,以在Set ...
- java.util.ResourceBundle用法
src目录下建三个文件分别为my.properties,my_en_US.properties,my_zh_CN.properties 下面的方法直接在main方法中运行 //获取src目录下my.p ...
最新文章
- elasticsearch _field_stats 源码分析
- Mac 完全卸载 Java
- mysql 时间取日期函数_mysql 获取当前日期函数及时间格式化参数详解
- java 工作 日期转换代码,判断是否是当天,然后日期转换
- 漫游Kafka实现篇之分布式
- python面向对象类_python:面向对象(类)
- c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5
- java实现复原IP地址,回溯算法:复原IP地址
- 实验报告格计算机,计算机实验报告格式大全
- anaconda的python环境下无法使用通过pip安装的python库
- Spring - Configuration Metadata
- 对华为HG255D路由器进行JTAG调试的进一步研究
- ppt流程图箭头分叉_箭头循环图ppt模板_PPT结构图制作中箭头跟着目标走的技巧_ppt箭头流程图模板_ppt箭头循环图...
- 如何打造百万爆款短视频?普通人如何通过短视频赚钱?3分钟学会
- 社会工程学与APT攻击之——社工防御方法
- 使用JS实现前端缓存
- java Font 自定义字体
- Linux云计算架构师课程(兄弟连IT教育)
- C语言 带参数宏定义中 # 和 ## 知识点总结、代码分析
- java接口设计规范_关于团队API接口规范设计
热门文章
- SpringBoot项目多环境配置(亲测有效)
- linux 下spi的使用 ,cc2500模块驱动
- PHP打出来的数字和成语,php批量将词语 成语 导入数据库
- 大众点评爬虫(Python)
- f分布表完整图a=0.01_R语言具有Student-t分布改进的GARCH(1,1)模型的贝叶斯估计...
- 性能测试流程(完整版)
- 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-9825】-【V6.0 Android-Q-TG1】...
- Excel·VBA数组组合函数、组合求和
- 数据清洗以及常用的方法
- Linux 使用yum下载软件