projectresourcebundle.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 432 行 · 第 1/2 页
JAVA
432 行
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.axis2.jaxws.i18n;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
/**
* <p>Wrapper class for resource bundles. Property files are used to store resource strings, which
* are the only types of resources available. Property files can inherit properties from other files
* so that a base property file can be used and a small number of properties can be over-ridden by
* another property file. For example you may create an english version of a resource file named
* "resource.properties". You then decide that the British English version of all of the properties
* except one are the same, so there is no need to redefine all of the properties in
* "resource_en_GB", just the one that is different.</p> <p>The basename is the name of the property
* file without the ".properties" extension.</p> <p>Properties will be cached for performance.<p>
* <p>Property values stored in the property files can also contain dynamic variables. Any dynamic
* variable defined in PropertiesUtil.getVariableValue() can be used (such as {date}), as well as
* arguments in the form {0}, {1}, etc. Argument values are specified in the various overloaded
* getString() methods.</p>
*/
public class ProjectResourceBundle extends ResourceBundle {
private static final Log log = LogFactory.getLog(ProjectResourceBundle.class);
// The static cache of ResourceBundles.
// The key is the 'basename + locale + default locale'
// The element is a ResourceBundle object
private static final Hashtable bundleCache = new Hashtable();
private static final Locale defaultLocale = Locale.getDefault();
private final ResourceBundle resourceBundle;
private final String resourceName;
protected Object handleGetObject(String key)
throws MissingResourceException {
if (log.isDebugEnabled()) {
log.debug(this.toString() + "::handleGetObject(" + key + ")");
}
Object obj;
try {
obj = resourceBundle.getObject(key);
} catch (MissingResourceException e) {
/* catch missing resource, ignore, & return null
* if this method doesn't return null, then parents
* are not searched
*/
obj = null;
}
return obj;
}
public Enumeration getKeys() {
Enumeration myKeys = resourceBundle.getKeys();
if (parent == null) {
return myKeys;
} else {
final HashSet set = new HashSet();
while (myKeys.hasMoreElements()) {
set.add(myKeys.nextElement());
}
Enumeration pKeys = parent.getKeys();
while (pKeys.hasMoreElements()) {
set.add(pKeys.nextElement());
}
return new Enumeration() {
private Iterator it = set.iterator();
public boolean hasMoreElements() {
return it.hasNext();
}
public Object nextElement() {
return it.next();
}
};
}
}
/**
* Construct a new ProjectResourceBundle
*
* @param projectName The name of the project to which the class belongs. It must be a proper
* prefix of the caller's package.
* @param packageName The package name to further construct the basename.
* @param resourceName The name of the resource without the ".properties" extension
* @throws MissingResourceException if projectName is not a prefix of the caller's package name,
* or if the resource could not be found/loaded.
*/
public static ProjectResourceBundle getBundle(String projectName,
String packageName,
String resourceName)
throws MissingResourceException {
return getBundle(projectName, packageName, resourceName, null, null, null);
}
/**
* Construct a new ProjectResourceBundle
*
* @param projectName The name of the project to which the class belongs. It must be a proper
* prefix of the caller's package.
* @param caller The calling class.
* @param resourceName The name of the resource without the ".properties" extension
* @throws MissingResourceException if projectName is not a prefix of the caller's package name,
* or if the resource could not be found/loaded.
*/
public static ProjectResourceBundle getBundle(String projectName,
Class caller,
String resourceName,
Locale locale)
throws MissingResourceException {
return getBundle(projectName,
caller,
resourceName,
locale,
null);
}
/**
* Construct a new ProjectResourceBundle
*
* @param projectName The name of the project to which the class belongs. It must be a proper
* prefix of the caller's package.
* @param packageName The package name to construct base name.
* @param resourceName The name of the resource without the ".properties" extension
* @param locale The locale
* @throws MissingResourceException if projectName is not a prefix of the caller's package name,
* or if the resource could not be found/loaded.
*/
public static ProjectResourceBundle getBundle(String projectName,
String packageName,
String resourceName,
Locale locale,
ClassLoader loader)
throws MissingResourceException {
return getBundle(projectName, packageName, resourceName, locale, loader, null);
}
/**
* Construct a new ProjectResourceBundle
*
* @param projectName The name of the project to which the class belongs. It must be a proper
* prefix of the caller's package.
* @param caller The calling class. This is used to get the package name to further
* construct the basename as well as to get the proper ClassLoader.
* @param resourceName The name of the resource without the ".properties" extension
* @param locale The locale
* @param extendsBundle If non-null, then this ExtendMessages will default to extendsBundle.
* @throws MissingResourceException if projectName is not a prefix of the caller's package name,
* or if the resource could not be found/loaded.
*/
public static ProjectResourceBundle getBundle(String projectName,
Class caller,
String resourceName,
Locale locale,
ResourceBundle extendsBundle)
throws MissingResourceException {
return getBundle(projectName,
getPackage(caller.getClass().getName()),
resourceName,
locale,
caller.getClass().getClassLoader(),
extendsBundle);
}
/**
* Construct a new ProjectResourceBundle
*
* @param projectName The name of the project to which the class belongs. It must be a proper
* prefix of the caller's package.
* @param packageName The package name to further construct the basename.
* @param resourceName The name of the resource without the ".properties" extension
* @param locale The locale
* @param extendsBundle If non-null, then this ExtendMessages will default to extendsBundle.
* @throws MissingResourceException if projectName is not a prefix of the caller's package name,
* or if the resource could not be found/loaded.
*/
public static ProjectResourceBundle getBundle(String projectName,
String packageName,
String resourceName,
Locale locale,
ClassLoader loader,
ResourceBundle extendsBundle)
throws MissingResourceException {
if (log.isDebugEnabled()) {
log.debug("getBundle(" + projectName + ","
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?