| public abstract class java.util ResourceBundle
|
Java SE 6 |
String for example, your program can load it
from the resource bundle that is appropriate for the
current user's locale. In this way, you can write
program code that is largely independent of the user's
locale isolating most, if not all, of the locale-specific
information in resource bundles.
This allows you to write programs that can:
Resource bundles belong to families whose members share a common base name, but whose names also have additional components that identify their locales. For example, the base name of a family of resource bundles might be "MyResources". The family should have a default resource bundle which simply has the same name as its family - "MyResources" - and will be used as the bundle of last resort if a specific locale is not supported. The family can then provide as many locale-specific members as needed, for example a German one named "MyResources_de".
Each resource bundle in a family contains the same items, but the items have
been translated for the locale represented by that resource bundle.
For example, both "MyResources" and "MyResources_de" may have a
String that's used on a button for canceling operations.
In "MyResources" the String may contain "Cancel" and in
"MyResources_de" it may contain "Abbrechen".
If there are different resources for different countries, you can make specializations: for example, "MyResources_de_CH" contains objects for the German language (de) in Switzerland (CH). If you want to only modify some of the resources in the specialization, you can do so.
When your program needs a locale-specific object, it loads
the ResourceBundle class using the
getBundle
method:
ResourceBundle myResources =
ResourceBundle.getBundle("MyResources", currentLocale);
Resource bundles contain key/value pairs. The keys uniquely
identify a locale-specific object in the bundle. Here's an
example of a ListResourceBundle that contains
two key/value pairs:
public class MyResources extends ListResourceBundle {
protected Object[][] getContents() {
return new Object[][] {
// LOCALIZE THE SECOND STRING OF EACH ARRAY (e.g., "OK")
{"OkKey", "OK"},
{"CancelKey", "Cancel"},
// END OF MATERIAL TO LOCALIZE
};
}
}
Keys are always Strings.
In this example, the keys are "OkKey" and "CancelKey".
In the above example, the values
are also Strings--"OK" and "Cancel"--but
they don't have to be. The values can be any type of object.
You retrieve an object from resource bundle using the appropriate
getter method. Because "OkKey" and "CancelKey"
are both strings, you would use getString to retrieve them:
button1 = new Button(myResources.getString("OkKey"));
button2 = new Button(myResources.getString("CancelKey"));
The getter methods all require the key as an argument and return
the object if found. If the object is not found, the getter method
throws a MissingResourceException.
Besides getString, ResourceBundle also provides
a method for getting string arrays, getStringArray,
as well as a generic getObject method for any other
type of object. When using getObject, you'll
have to cast the result to the appropriate type. For example:
int[] myIntegers = (int[]) myResources.getObject("intList");
The Java Platform provides two subclasses of ResourceBundle,
ListResourceBundle and PropertyResourceBundle,
that provide a fairly simple way to create resources.
As you saw briefly in a previous example, ListResourceBundle
manages its resource as a list of key/value pairs.
PropertyResourceBundle uses a properties file to manage
its resources.
If ListResourceBundle or PropertyResourceBundle
do not suit your needs, you can write your own ResourceBundle
subclass. Your subclasses must override two methods: handleGetObject
and getKeys().
ResourceBundle.Control class provides information necessary
to perform the bundle loading process by the getBundle
factory methods that take a ResourceBundle.Control
instance. You can implement your own subclass in order to enable
non-standard resource bundle formats, change the search strategy, or
define caching parameters. Refer to the descriptions of the class and the
getBundle
factory method for details.
getBundle factory
methods are cached by default, and the factory methods return the same
resource bundle instance multiple times if it has been
cached. getBundle clients may clear the cache, manage the
lifetime of cached resource bundle instances using time-to-live values,
or specify not to cache resource bundle instances. Refer to the
descriptions of the Locale, ClassLoader,
Control) getBundle factory method, clearCache, ResourceBundle.Control.getTimeToLive, and Locale, String, ClassLoader, ResourceBundle,
long) ResourceBundle.Control.needsReload for details.
ResourceBundle
subclass, MyResources, that manages two resources (for a larger number of
resources you would probably use a Map).
Notice that you don't need to supply a value if
a "parent-level" ResourceBundle handles the same
key with the same value (as for the okKey below).
// default (English language, United States)
public class MyResources extends ResourceBundle {
public Object handleGetObject(String key) {
if (key.equals("okKey")) return "Ok";
if (key.equals("cancelKey")) return "Cancel";
return null;
}
public Enumeration<String> getKeys() {
return Collections.enumeration(keySet());
}
// Overrides handleKeySet() so that the getKeys() implementation
// can rely on the keySet() value.
protected Set<String> handleKeySet() {
return new HashSet<String>(Arrays.asList("okKey", "cancelKey"));
}
}
// German language
public class MyResources_de extends MyResources {
public Object handleGetObject(String key) {
// don't need okKey, since parent level handles it.
if (key.equals("cancelKey")) return "Abbrechen";
return null;
}
protected Set<String> handleKeySet() {
return new HashSet<String>(Arrays.asList("cancelKey"));
}
}
You do not have to restrict yourself to using a single family of
ResourceBundles. For example, you could have a set of bundles for
exception messages, ExceptionResources
(ExceptionResources_fr, ExceptionResources_de, ...),
and one for widgets, WidgetResource (WidgetResources_fr,
WidgetResources_de, ...); breaking up the resources however you like.
| since | JDK1.1 |
| See also | java.util.ListResourceBundle, java.util.PropertyResourceBundle, java.util.MissingResourceException |
| Fields | |
|---|---|
| protected ResourceBundle | parent The parent bundle of this bundle. The parent bundle is searched by getObject
when this bundle does not contain a particular resource.
|
| Constructors | |
|---|---|
| public | ResourceBundle() Sole constructor. (For invocation by subclass constructors, typically implicit.) |
| Methods | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| final public static void | clearCache() Removes all resource bundles from the cache that have been loaded using the caller's class loader.
| ||||||||
| final public static void | clearCache(ClassLoader loader) Removes all resource bundles from the cache that have been loaded using the given class loader.
| ||||||||
| public boolean | containsKey(String key) Determines whether the given key is contained in
this ResourceBundle or its parent bundles.
| ||||||||
| abstract protected Object | handleGetObject(String key) Gets an object for the given key from this resource bundle. Returns null if this resource bundle does not contain an object for the given key.
| ||||||||
| protected Set | handleKeySet() Returns a Set of the keys contained only
in this ResourceBundle.
The default implementation returns a
| ||||||||
| public Set | keySet() Returns a Set of all keys contained in this
ResourceBundle and its parent bundles.
| ||||||||
| Properties | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| final public static ResourceBundle | getBundle(String baseName) Gets a resource bundle using the specified base name, the default locale, and the caller's class loader. Calling this method is equivalent to calling
except that getClassLoader() is run with the security
privileges of ResourceBundle.
See getBundle
for a complete description of the search and instantiation strategy.
| ||||||||||||||||||||||||||||||||
| final public static ResourceBundle | getBundle(String baseName, ResourceBundle.Control control) Returns a resource bundle using the specified base name, the default locale and the specified control. Calling this method is equivalent to calling
getBundle(baseName, Locale.getDefault(),
this.getClass().getClassLoader(), control),
except that getClassLoader() is run with the security
privileges of ResourceBundle. See getBundle for the
complete description of the resource bundle loading process with a
ResourceBundle.Control.
| ||||||||||||||||||||||||||||||||
| final public static ResourceBundle | getBundle(String baseName, Locale locale) Gets a resource bundle using the specified base name and locale, and the caller's class loader. Calling this method is equivalent to calling
except that getClassLoader() is run with the security
privileges of ResourceBundle.
See getBundle
for a complete description of the search and instantiation strategy.
| ||||||||||||||||||||||||||||||||
| final public static ResourceBundle | getBundle(String baseName, Locale targetLocale, ResourceBundle.Control control) Returns a resource bundle using the specified base name, target locale and control, and the caller's class loader. Calling this method is equivalent to calling
getBundle(baseName, targetLocale, this.getClass().getClassLoader(),
control),
except that getClassLoader() is run with the security
privileges of ResourceBundle. See getBundle for the
complete description of the resource bundle loading process with a
ResourceBundle.Control.
| ||||||||||||||||||||||||||||||||
| public static ResourceBundle | getBundle(String baseName, Locale locale, ClassLoader loader) Gets a resource bundle using the specified base name, locale, and class loader.
Conceptually,
Candidate bundle names where the final component is an empty string are omitted. For example, if country1 is an empty string, the second candidate bundle name is omitted.
If no result resource bundle has been found, a
Once a result resource bundle has been found, its parent chain is instantiated.
The
Example:
MyResources.class
MyResources.properties
MyResources_fr.properties
MyResources_fr_CH.class
MyResources_fr_CH.properties
MyResources_en.properties
MyResources_es_ES.class
The contents of all files are valid (that is, public non-abstract subclasses of ResourceBundle for
the ".class" files, syntactically correct ".properties" files).
The default locale is Locale("en", "GB").
Calling
The file MyResources_fr_CH.properties is never used because it is hidden by MyResources_fr_CH.class. Likewise, MyResources.properties is also hidden by MyResources.class.
| ||||||||||||||||||||||||||||||||
| public static ResourceBundle | getBundle(String baseName, Locale targetLocale, ClassLoader loader, ResourceBundle.Control control) Returns a resource bundle using the specified base name, target locale, class loader and control. Unlike the getBundle
factory methods with no control argument, the given
control specifies how to locate and instantiate resource
bundles. Conceptually, the bundle loading process with the given
control is performed in the following steps.
During the resource bundle loading process above, this factory
method looks up the cache before calling the All resource bundles loaded are cached by default. Refer to
The following is an example of the bundle loading process with the
default Conditions:
First,
At this point,
| ||||||||||||||||||||||||||||||||
| abstract public Enumeration | getKeys() Returns an enumeration of the keys.
| ||||||||||||||||||||||||||||||||
| public Locale | getLocale() Returns the locale of this resource bundle. This method can be used after a call to getBundle() to determine whether the resource bundle returned really corresponds to the requested locale or is a fallback.
| ||||||||||||||||||||||||||||||||
| final public Object | getObject(String key) Gets an object for the given key from this resource bundle or one of its parents. This method first tries to obtain the object from this resource bundle using handleGetObject.
If not successful, and the parent resource bundle is not null,
it calls the parent's getObject method.
If still not successful, it throws a MissingResourceException.
| ||||||||||||||||||||||||||||||||
| protected void | setParent(ResourceBundle parent) Sets the parent bundle of this bundle. The parent bundle is searched by getObject
when this bundle does not contain a particular resource.
| ||||||||||||||||||||||||||||||||
| final public String | getString(String key) Gets a string for the given key from this resource bundle or one of its parents. Calling this method is equivalent to calling
| ||||||||||||||||||||||||||||||||
| final public String[] | getStringArray(String key) Gets a string array for the given key from this resource bundle or one of its parents. Calling this method is equivalent to calling
| ||||||||||||||||||||||||||||||||
| About DocWeb · Bundles · Export · Export All | Top 10 · Statistics · Login |
| About Sun · Contact · Privacy · Terms of Use · Trademarks | Java SE 6 · Copyright © 1994-2009 Sun Microsystems, Inc.All rights reserved. Use is subject to license terms |
![]() |
![]() |
|