Java ListResourceBundle类介绍

x33g5p2x  于2022-09-24 转载在 Java  
字(4.1k)|赞(0)|评价(0)|浏览(261)

Java ListResourceBundleResourceBundle 的抽象类,用于管理区域设置的资源。资源被创建为 Java 类。要创建资源类,我们需要为每个所需的语言环境创建 ListResourceBundle 的子类并覆盖 getContents() 方法。要获取 ResourceBundle 实例,我们需要调用 ResourceBundle.getBundle 方法并传递资源库名称和语言环境。要从资源中获取键的值,我们需要在 ResourceBundle 的实例上调用 getObject 方法。在这里,我们将提供在我们的应用程序中使用 ListResourceBundle 的完整示例。

创建 ListResourceBundle 子类

要通过扩展 ListResourceBundle 创建资源类,我们需要遵循一个模式。资源类名称将是基本名称和语言环境的组合。
假设我们的资源库名称是 MyDataBundle
1. 对于 Locale("en", "US"),资源类名称将为 MyDataBundle_en_US.class
2. 对于 Locale("de", "DE"),资源类名称将为 MyDataBundle_de_DE.class
3. 对于 Locale("fr", "FR"),资源类名称将为 MyDataBundle_fr_FR.class

资源类需要重写 ListResourceBundlegetContents() 方法。 getContents() 方法返回表示键值对的二维 Object 数组。每对的第一个元素是应该是 String 的键,第二个元素是与该键关联的值。与键关联的值不必是 String,但它可以是任何类型的对象。
现在找到我们所有的资源类。
MyDataBundle_en_US.java

package com.concretepage.lsbundles;
import java.util.ListResourceBundle;
import com.concretepage.President;
public class MyDataBundle_en_US extends ListResourceBundle  {
  @Override
  protected Object[][] getContents() {
	return contents;
  }
  private Object[][] contents = {
      { "Country", "United States" },
      { "President", new President("Donald Trump", 73) },
      { "Literacy", Double.valueOf(99.20) },
  };  
}

MyDataBundle_de_DE.java

package com.concretepage.lsbundles;
import java.util.ListResourceBundle;
import com.concretepage.President;
public class MyDataBundle_de_DE extends ListResourceBundle {
  @Override
  protected Object[][] getContents() {
	return contents;
  }
  private Object[][] contents = {
      { "Country", "Germany" },
      { "President", new President("Frank-Walter", 63) },
      { "Literacy", Double.valueOf(98.40) },
  };  
}

MyDataBundle_fr_FR.java

package com.concretepage.lsbundles;
import java.util.ListResourceBundle;
import com.concretepage.President;
public class MyDataBundle_fr_FR extends ListResourceBundle {
  @Override
  protected Object[][] getContents() {
	return contents;
  }
  private Object[][] contents = {
      { "Country", "France" },
      { "President", new President("Emmanuel Macron", 41) },
      { "Literacy", Double.valueOf(99.50) },
  };  
}

President.java

package com.concretepage;
public class President {
  private String presidentName;
  private int age;

  public President(String presidentName, int age) {
	this.presidentName = presidentName;
	this.age = age;
  }
  //Setters and getters
}

创建 ResourceBundle 并获取本地化对象

要创建 ResourceBundle,我们需要调用 ResourceBundle.getBundle 方法并传递资源库名称和语言环境。在我们的示例中,资源类基名是 MyDataBundle,我们需要将其作为完全限定的类名传递。找到代码。

ResourceBundle rs = 
    ResourceBundle.getBundle("com.concretepage.lsbundles.MyDataBundle", new Locale("en", "US"));

要从资源中获取键的值,我们需要在 ResourceBundle 的实例上调用 getObject 方法。

String country = (String) rs.getObject("Country");
President president = (President) rs.getObject("President");
Double literacy = (Double) rs.getObject("Literacy");

getObject 返回 Object 类型的对象。我们需要将其转换为所需的数据类型。
现在找到我们示例中创建 ResourceBundle 并获取本地化对象的类。
MyDataBundleDemo.java

package com.concretepage;
import java.util.Locale;
import java.util.ResourceBundle;
public class MyDataBundleDemo {
  public static void main(String[] args) {
	System.out.println("---For Locale en_US---");
	ResourceBundle rs = ResourceBundle.getBundle("com.concretepage.lsbundles.MyDataBundle", new Locale("en", "US"));
	displayStateDetails(rs);

	System.out.println("---For Locale de_DE---");
	rs = ResourceBundle.getBundle("com.concretepage.lsbundles.MyDataBundle", new Locale("de", "DE"));
	displayStateDetails(rs);

	System.out.println("---For Locale fr_FR---");
	rs = ResourceBundle.getBundle("com.concretepage.lsbundles.MyDataBundle", new Locale("fr", "FR"));
	displayStateDetails(rs);
  }

  private static void displayStateDetails(ResourceBundle rs) {
	String country = (String) rs.getObject("Country");
	President president = (President) rs.getObject("President");
	Double literacy = (Double) rs.getObject("Literacy");

	System.out.println(country);
	System.out.println(president.getPresidentName() + "-" + president.getAge());
	System.out.println(literacy);
  }
}

输出

---For Locale en_US---
United States
Donald Trump-73
99.2
---For Locale de_DE---
Germany
Frank-Walter-63
98.4
---For Locale fr_FR---
France
Emmanuel Macron-41
99.5

相关文章

微信公众号

最新文章

更多