资源包包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包中加载它
主要API如下
// 使用指定的基本名称、语言环境和调用者的类加载器获取资源包。调用此方法等同于调用
// getBundle(baseName, locale, this.getClass().getClassLoader())
public static final ResourceBundle getBundle(String baseName,Locale locale)
// 返回键的枚举。
public abstract Enumeration<String> getKeys()
// 从此资源包或它的某个父包中获取给定键的对象。此方法首先尝试使用 handleGetObject 从此资源包中获取对象。
// 如果不成功,并且父资源包不为 null,则调用父包的 getObject 方法。
// 如果仍不成功,则抛出 MissingResourceException
public final Object getObject(String key)
子接口 java.util.PropertyResourceBundle , java.util.ListResourceBundle
PropertyResourceBundle 由于写入的是.properties文件,所以保存的值都是字符串,用文件实现
ListResourceBundle 可以保存任意类型的数据,用类来实现, 主要实现 contents 方法
import java.util.*;
public class StatsBundle_ja_JP extends ListResourceBundle {
public Object[][] getContents() {
return contents;
}
private Object[][] contents = {
{ "GDP", new Integer(21300) },
{ "Population", new Integer(125449703) },
{ "Literacy", new Double(0.99) },
}
}
注意:getBundel 中的参数 baseName( 取名 LabelsBundle) 有一点说明,
如果用 PropertyResourceBundle, 则相对应的文件名为 LabelsBundle_对应的语言.peropertis(如zh_cn, en, de)等
如果用 ListResourceBundle,则对应的类名为 LabelsBundle_语言名_国家名 如(ja_JP , fr_FR ,en_CA)等
扩展 ResourceBundle
//使用指定基本名称、目标语言环境和控件、调用者的类加载器返回一个资源包。调用此方法等同
//于调用getBundle(baseName, targetLocale, this.getClass().getClassLoader(),control),
public static final ResourceBundle getBundle(String baseName,Locale targetLocale,ResourceBundle.Control control)
import java.util.*;
public class RBControl {
public static void main(String[] args) {
test(Locale.CHINA);
test(new Locale("zh", "HK"));
test(Locale.TAIWAN);
test(Locale.CANADA);
}
private static void test(Locale locale) {
ResourceBundle rb = ResourceBundle.getBundle("RBControl", locale,
new ResourceBundle.Control() {
@Override
//返回 Locale 的 List,作为 baseName 和 locale 的候选语言环境。在工厂方法每次尝试为目标 Locale 查找资源包时,
//由 ResourceBundle.getBundle 工厂方法调用此方法。
public List<Locale> getCandidateLocales(String baseName, Locale locale) {
if (baseName == null)
throw new NullPointerException();
if (locale.equals(new Locale("zh", "HK"))) {
return Arrays.asList(
locale,
Locale.TAIWAN,
// no Locale.CHINESE here
Locale.ROOT);
} else if (locale.equals(Locale.TAIWAN)) {
return Arrays.asList(
locale,
// no Locale.CHINESE here
Locale.ROOT);
}
return super.getCandidateLocales(baseName, locale);
}
});
System.out.println("locale: " + locale);
System.out.println("\tregion: " + rb.getString("region"));
System.out.println("\tlanguage: " + rb.getString("language"));
}
}
分享到:
相关推荐
Lodop与java结合使用打印,条码打印功能的使用
把wsdl文件转换成java类 使用wsdl2Java工具
使用JAVA实现MODBUS协议通信.。。。。。。。。
这个是使用java语言 poi导入excel到数据库中,同时使用了xml对excel的每个单元格数据进行了非空验证。经测试,导入数据库成功。
java中使用公钥加密私钥解密原理实现license控制
当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等。 适合人群 1. 具备一定编程基础,工作1-3年的研发...
Java使用SOAP获取webservice实例解析 具体实例分析说明。
本资源是使用 java,分别用 TCP 和 UDP 传输文件的源代码。读者朋友可以下载下来,参考着满足自己的需求。 另有博客《Java 使用 TCP 和 UDP 传输文件》可以参考,地址是:...
Java中使用Json的net.sf.json包,其中包含JSONObject与JSONArray等操作类,十分好用。
java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例
使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...
java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口。 java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt....
java 使用Date类获取系统的当前时间 java 使用Date类获取系统的当前时间 java 使用Date类获取系统的当前时间
Eclipse下完整的java程序,包含HttpClient的全部jar包。通过java类文件,实现通过链接将文件下载本地
java 使用URL访问网页 java 使用URL访问网页 java 使用URL访问网页
java使用ldap修改ad域用户密码
PngEncoder.java针对java平台处理png压缩算法
errorCompoundVariable.java 错误使用局部变量示例 factorial.java 求阶乘 Fibonacci.java 求Fiblnacci数列 GcdAndGcm.java 求最大公约数和最小公倍数 errorInit.java 演示变量初始化错误的程序 integer...
java 使用正则表达式验证电话号码的格式 java 使用正则表达式验证电话号码的格式