8.2.5 获得国际化资源信息
本实例演示了如何通过ResourceBundle类获得本地环境的资源信息。
例子 : 获得国际化资源信息
1. 实例说明
在这个例子中建立了两个资源文件,一个是中文环境的资源文件,一个是英文环境的资源文件。将Locale对象设为英文环境,这时ResourceBundle对象会读取英文环境中的信息。如果将英文资源文件删除。ResourceBundle对象由于未找到英文资源文件,因此,就会读取系统本地环境的资源文件。假设当前系统的本地环境是中文。ResourceBundle对象就会读取中文资源文件。当然,如果中文资源文件也没有,在创建ResourceBundle对象的过程中就会抛出异常。
2. 建立资源文件
在classes目录中建立一个resource目录,然后在该目录中建立两个资源文件:MyResource_zh.properties和MyResource_en.properties。这两个资源文件的内容如下:
MyResource_zh.properties文件的内容
help = 帮助
file = 文件
MyResource_en.properties文件的内容
help = Help
file = File
3. 编写读取资源信息的程序
ReadResource类负责读取资源文件的信息,该类的代码如下:
package chapter8;
import java.util.Locale;
import java.util.ResourceBundle;
public class ReadResource
{
public static void main(String[] args)
{
// 获得英文环境的Locale对象
Locale locale = Locale.ENGLISH;
// 根据baseName和Locale对象创建ResourceBundle对象
ResourceBundle rb = ResourceBundle.getBundle("resources.MyResource",
locale);
// 输出资源文件中的信息
System.out.println("help = " + rb.getString("help"));
System.out.println("file = " + rb.getString("file"));
}
}
4. 测试程序
运行ReadResource程序后,将输出如下的信息:
help = Help
file = File
5. 测试未找到英文资源文件的情况
删除MyResource_en.properties文件。再次运行ReadResource程序,将会输出如下的信息:
help = 帮助
file = 文件
从上面的输出结果可以看出,如果没有英文资源文件(MyResource_en.properties),则ResourceBundle对象会自动寻找与当前系统本地环境相符的资源文件。如果当前系统是中文环境,则ResourceBundle对象就会读取MyResource_zh.properties文件中的信息。
6. 测试未找到任何资源文件的情况
将MyResource_en.properties和MyResource_zh.properties文件都删除。再次运行ReadResource程序,这时在创建ResourceBundle对象时就会抛出如下的异常:
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name resources. MyResource, locale en
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1521)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1260)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:787)
at chapter8.ReadResource.main(ReadResource.java:11)