Java中ResourceBundle类的使用
来源:互联网 发布:上海游泳教练知乎 编辑:程序博客网 时间:2024/06/01 07:42
原文地址:
http://tutorials.jenkov.com/java-internationalization/resourcebundle.html
java.util.ResourceBundle类用来存储文本以及本地化相关数据。本文将介绍ResourceBundle及它的子类。
ResourceBundle的类层次结构
ResourceBundle类有两个子类,PropertyResourceBundle及ListResourceBundle。下面是这几个类的结构图。
PropertyResourceBundle将本地化的文本存储于Java property文件中。
创建ResourceBundle
可以按下面的方式创建ResourceBundle类的实例。
Locale locale = new Locale("en", "US");ResourceBundle labels = ResourceBundle.getBundle("i18n.MyBundle", locale);System.out.println(labels.getString("label1"));
首先需要创建Locale实例。然后将locale实例传给ResourceBundle.getBundle()方法,此外还需要传递要加载的resource bundle名称。最后可以通过ResourceBundle 的getString(),getObject()等方法访问本地化值。
实际上并没有创建ResourceBundle实例,而是创建了ResourceBundle子类的实例。实例的创建都是通过工厂方法来完成。首先ResourceBundle类将会查找ListResourceBundle,随后会查找PropertyResourceBundle。查找是根据ListResourceBundle类名来匹配resource boundle的名字来完成(getBundle()方法的第一个参数)。如果找不到,则根据PropertyResourceBundle resource bundle来匹配。
Property Files作为ResourceBundle
可以使用标准的属性文件来存储本地化文本。可以通过ResourceBundle 类加载这些属性。
Locale locale = new Locale("en", "US");ResourceBundle labels = ResourceBundle.getBundle("i18n.MyBundle", locale);System.out.println(labels.getString("label1"));上面的例子中,你需要将MyBundle放在包i18n中。
resource bundle 的名称类似类名。如i18n.MyBundle意思是,包i18n中的属性文件MyBundle.properties。
下面是属性文件中的内容。
label1 = Label 1 is done!label2 = Label 2 is through!上述文件是由一组key,value对构成。key在=号左侧,value在右侧。value是你要本地化的内容。
将不同的语言放置于不同的属性文件中
为了提供不同语言的字符串,需要为每种语言创建属性文件,文件名的格式为 xxxx_语言编码。例如:
MyBundle.propertiesMyBundle_da.propertiesMyBundle_de.propertiesMyBundle_fr.properties
这些文件应该放在同一个包中。
没有语言后缀的文件(例如:MyBundle.properties)是默认的属性文件。
带有语言编码后缀的属性文件包含同样的key但是value是以不同的语言来标识。如danish 属性文件:
label1 = Label 1 er klar!label2 = Label 2 er igennem!
将类作为ResourceBundle
也可以使用一组类来获取资源,使用类,还可以使用除字符串值外的其它类型资源。
与属性文件类似,可以创建带有 bundle base名称与语言后缀的一组类。
例如:
i18n.MyClassBundle
i18n.MyClassBundle_da
i18n.MyClassBundle_en
i18n.MyClassBundle_de
下面是一个默认的bundle class文件实现的例子。
import java.util.ListResourceBundle;public class MyClassBundle extends ListResourceBundle { @Override protected Object[][] getContents() { return contents; } private Object[][] contents = { { "price" , new Double(10.00) }, { "currency", "EUR" }, };}
下面是danish resource bundle的实现。
public class MyClassBundle_da extends ListResourceBundle { @Override protected Object[][] getContents() { return contents; } private Object[][] contents = { { "price" , new Double(75.00) }, { "currency", "DKK" }, };}
注意contents数组,是一个包含key,value的二维数组。price,currency是key,而key右侧为本地化的值。获取ListResourceBundle 实例的方式与获取PropertyResourceBundle实例的方式一样,下面是获取默认ResourceBundle 及丹麦语ResourceBundle 的例子。
Locale locale = new Locale("de", "DE"); //no bundle for German -> defaultResourceBundle bundle = ResourceBundle.getBundle("i18n.MyClassBundle", locale);System.out.println("price : " + bundle.getObject("price"));System.out.println("currency: " + bundle.getObject("currency"));locale = new Locale("da", "DK");bundle = ResourceBundle.getBundle("i18n.MyClassBundle", locale);System.out.println("price : " + bundle.getObject("price"));System.out.println("currency: " + bundle.getObject("currency"));输出是:price : 10.0currency: EURprice : 75.0currency: DKK
从ResourceBundle中获取值
获取ResourceBundle实例后可以通过下面的方法获得本地化值。
getObject(String key);
getString(String key);
getStringArray(String key);
还可以通过keySet()方法获取所有的key。Set<String> keys = bundle.keySet();
其它ResourceBundle 方法可以通过查看文档获得。
- Java中ResourceBundle类的使用
- Java中ResourceBundle类的使用
- JAVA 中 ResourceBundle 使用
- java.util..ResourceBundle的使用
- JAVA中ResourceBundle和Properties类的区别
- java.util.ResourceBundle使用
- ResourceBundle的使用
- ResourceBundle的使用
- ResourceBundle的使用
- JavaFX的ResourceBundle使用
- java的ResourceBundle.
- Java的ResourceBundle
- Java中使用ResourceBundle访问资源文件(properties文件)
- Java中使用ResourceBundle访问资源文件(properties文件)
- Java中使用ResourceBundle访问资源文件(properties文件)
- java.util.ResourceBundle类
- JAVA基础(6) -- java.util.ResourceBundle的使用
- java.util.ResourceBundle使用详解
- objective-c - 基础篇 - UIWebView
- ios 关于UIWebView控件的使用
- UIMenuController使用
- jquery绑定自定义事件
- 【PHP PDO】纯PHP(不使用框架)下 Mysql PDO 使用方法小记
- Java中ResourceBundle类的使用
- C#反射(取得方法、属性、变量)
- [nginx] 网上最全面nginx教程(近100篇文章整理)
- codeforces 670D1 - Magic Powder - 1
- 点击状态栏回到顶部
- iOS开发系列--UITableView全面解析
- 设计模式之抽象工厂模式(AbstructFactory)
- Spring ApplicationContext.xml配置的12个技巧和Bean属性说明
- Hibernate:a different object with the same identifier value was already associated with the session