8.2.6 从Java类中获得国际化资源信息

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

除了可以使用资源文件来保存资源信息外,还可以将资源信息放到Java类中。保存资源信息的Java类也可以被称为资源类。资源类和普通Java类有如下两点差异:

l 资源类的命名受到限制:资源类的命名和资源文件的命名类似。文件名必须是baseName_language_country、baseName_language或baseName中的一个。

2 资源类必须从java.util.ListResourceBundle类继承:ListResourceBundle类是一个抽象类,该类的子类必须实现getContents方法。该方法用于返回一个保存资源信息的二维String数组。

在src\resources目录创建一个MyResource_zh_CN.java文件,并输入如下的代码:

package resources;
import java.util.ListResourceBundle;
public class MyResource_zh_CN  extends ListResourceBundle
{
    //  定义保存资源信息的二维数组
    private final Object resources[][] =
    {
        {"file", "文件(资源类)"},
        {"help", "帮助(资源类)"}
    };
    @Override
    protected Object[][] getContents()
    {
        return resources;
    }
}

ReadResourceClass类从资源类(MyResource_zh_CN类)获得相应的资源信息,ReadResourceClass类的代码如下:

package chapter8;
import java.util.ResourceBundle;
public class ReadResourceClass
{
    public static void main(String[] args)
    {
        ResourceBundle rb = ResourceBundle.getBundle("resources.MyResource");
        System.out.println("help = " + rb.getString("help"));
        System.out.println("file = " + rb.getString("file"));      
    }
}

ReadResourceClass程序的输出结果如下:

help = 帮助(资源类)

file = 文件(资源类)

如果资源文件和资源类同时存在,则搜索顺序如下:

l baseName_language_country.class

2 baseName_language_country.properties

3 baseName_language.class

4 baseName_language.properties

5 baseName.class

6 baseName.properties