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 + -
显示快捷键?