8.2.5 获得国际化资源信息

优质
小牛编辑
129浏览
2023-12-01

本实例演示了如何通过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)