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的形式遍历,获得属性文件内的各个值。

ResourceBundle使用详解相关推荐

  1. java.util.ResourceBundle使用详解

    为什么80%的码农都做不了架构师?>>>      2009-07-29 00:47:17     一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序 ...

  2. 【转】java.util.ResourceBundle使用详解

    原文链接:http://lavasoft.blog.51cto.com/62575/184605/ 人家写的太好了,条理清晰,表达准确. 一.认识国际化资源文件 这个类提供软件国际化的捷径.通过此类, ...

  3. 国际化之使用ResourceBundle.getBundle详解

    首先新建一个Resources文件夹 新建有个Resource Bundle 'DigitalDialog' Resources 效果如下 中文 tips.state.initializing=\u9 ...

  4. Stuts的Web.xml 详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

  5. SpringBoot的配置详解application

    SpringBoot的配置文件application有两种文件格式,两种配置的内容是一致的,只是格式不一致. 1.application.properties 2.application.yml或者a ...

  6. [转]application.properties详解 --springBoot配置文件

    本文转载:http://blog.csdn.net/lpfsuperman/article/details/78287265###; # spring boot application.propert ...

  7. ClassLoader 详解及用途

    转载自 ClassLoader 详解及用途 ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的cl ...

  8. basicdatasourcefactory mysql_Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中"获得连接"或"释放资源 ...

  9. UNICODE与UTF-8的转换详解

    UNICODE与UTF-8的转换详解 1 编码 在计算机中,各种信息都是以二进制编码的形式存在的,也就是说,不管是文字.图形.声音.动画,还是电影等各种信息,在计算机中都是以0和1组成的二进制代码表示 ...

  10. application.properties详解 --springBoot配置文件

    转载侵删:https://blog.csdn.net/lpfsuperman/article/details/78287265 以下为链接原文 # spring boot application.pr ...

最新文章

  1. nmt模型源文本词项序列_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...
  2. 《让系统发生重大宕机事故的15个方法》
  3. AI+零售:人工智能撬动零售变革
  4. Leetcode 344. 反转字符串 (每日一题 20210812)
  5. 编程之美-饮料供货方法整理
  6. oracle删除无效归档日志,求助:rman无法按照策略删除过期的归档日志
  7. GDCM:gdcm::Defs的测试程序
  8. 递归javascript_使用freeCodeCamp挑战解释了JavaScript中的递归
  9. python解析原理_python爬虫原理
  10. 程序流程图的switch怎么表示_算法是程序的灵魂,让我们从基础开始
  11. 【Docker】 命令速查
  12. Bolt界面引擎中XLUE布局XML文件节点属性配置详解
  13. SAP License:ERP项目升级评标会偶遇以前同事感慨
  14. 用户故事与用户故事地图——互联网平台建设
  15. 3秒教会你在线制作选项卡图标ico
  16. flutter版本升级
  17. iter()——迭代器
  18. 同济大学软件学院特聘教授朱少民谈《测试,从哪里来,到哪里去》
  19. 1-2 移动均线交叉策略1
  20. MATLAB等高线图

热门文章

  1. [2.1]-AutoSAR零基础学习-汽车电子控制系统简介
  2. [二]Unity接入Steam技术[大厅,邀请好友,Steam消息事件,成就]
  3. 第三届泰迪杯全国大学生数据挖掘竞赛通知
  4. Notepad++无法修改中文解决办法
  5. 2继电器控制单相电机正反转
  6. 208个地级市和31个省市城乡泰尔指数(2010-2019年)
  7. 最简单的文件加密工具(完全免费)
  8. VIVADO 下载mcs 文件
  9. windows定时截屏小工具
  10. 01_3基带传输的常用码型和码间串扰