资源束(ResourceBundle)是一个本地化对象。它封装了适用于本地环境的资源。(例如:log信息适用于日文,中文,英文等操作系统。)
Tomcat 的国际化管理是根据java文件包分类的。(比如操作系统为日文,那么通过ResourceBundle.getBundle(org.apache.XXXX)所得到的本地资源束所指向的文件既是org.apaceh包下的XXXX_ja.properties。)
Tomcat 维护了一个StringManager的集合。Tomcat将国际化资源信息存储在相应的包中。
private static Hashtable managers = new Hashtable();
public synchronized static StringManager getManager(String packageName) {
StringManager mgr = (StringManager)managers.get(packageName);
if (mgr == null) {
mgr = new StringManager(packageName);
managers.put(packageName, mgr);
}
return mgr;
}
managers结构如下:
managers___("org.apache.catalina.startup", StringManager)
|
|__("org.apache.catalina.core", StringManager)
|
|__…………
StringManager类实现了对ResourceBundle资源束的管理,是ResourceBundle的封装。
public class StringManager {
private ResourceBundle bundle;
}
构造方法中实现了通过包名来取得本地环境指定包下的bundle
String bundleName = packageName + ".LocalStrings";
bundle = ResourceBundle.getBundle(bundleName);
如果本地环境为日文系统,那么通过org.apache.catalina.startup.LocalStrings键值取得的资源是org.apache.catalina.startup.LocalStrings_ja.properties中的文件信息。
最后通过bundle.getString(key);方法,即可得到本地资源信息。
实例应用:
项目中对日志内容和页面的项目信息进行国际化管理。并且,日志内容和页面项目分别用两个文件处理。
页面项目资源文件是config.page.properties.
日志内容资源文件是config.log.properties.
那么建立两个资源束分别处理这两个本地资源。
bundle = ResourceBundle.getBundle("config.page");
bundle = ResourceBundle.getBundle("config.log.");
使用时,只需要添加不同的本地信息即可。例如:config.page_ja.properties,config.page_en.properties等。