public abstract class ShadowResourceBundle extends ResourceBundle
ShadowResourceBundle
is an abstract base class for
ResourceBundle
classes which are backed by a properties file. When
the class is created, it loads a properties file with the same name as the
class.
In the standard scheme (see ResourceBundle
),
if you call
,
it first looks for a class called ResourceBundle.getBundle(java.lang.String)
("foo.MyResource")foo.MyResource
, then
looks for a file called foo/MyResource.properties
. If it finds
the file, it creates a PropertyResourceBundle
and loads the class.
The problem is if you want to load the .properties
file
into a dedicated class; ShadowResourceBundle
helps with this
case.
You should create a class as follows:
Then when you callpackage foo; class MyResource extends org.eigenbase.resgen.ShadowResourceBundle { public MyResource() throws java.io.IOException { } }
ResourceBundle.getBundle("foo.MyResource")
,
it will find the class before the properties file, but still automatically
load the properties file based upon the name of the class.ResourceBundle.Control
Modifier and Type | Field and Description |
---|---|
protected static Object[] |
emptyObjectArray |
parent
Modifier | Constructor and Description |
---|---|
protected |
ShadowResourceBundle()
Creates a
ShadowResourceBundle , and reads resources from
a .properties file with the same name as the current class. |
Modifier and Type | Method and Description |
---|---|
Enumeration |
getKeys() |
static Locale |
getThreadLocale()
Returns the preferred locale of the current thread, or null if the
thread has not called
setThreadLocale(java.util.Locale) . |
protected static Locale |
getThreadOrDefaultLocale()
Returns the preferred locale of the current thread, or
the default locale if the current thread has not called
setThreadLocale(java.util.Locale) . |
protected Object |
handleGetObject(String key) |
protected static ResourceBundle |
instance(String baseName)
Deprecated.
This method does not work correctly in dynamically
loaded jars.
|
protected static ShadowResourceBundle |
instance(String baseName,
Locale locale)
Deprecated.
This method does not work correctly in dynamically
loaded jars.
|
protected static ShadowResourceBundle |
instance(String baseName,
Locale locale,
ResourceBundle bundle)
Returns the instance of the
baseName resource bundle
for the given locale. |
static void |
setThreadLocale(Locale locale)
Sets the locale for the current thread.
|
clearCache, clearCache, containsKey, getBundle, getBundle, getBundle, getBundle, getBundle, getBundle, getLocale, getObject, getString, getStringArray, handleKeySet, keySet, setParent
protected static final Object[] emptyObjectArray
protected ShadowResourceBundle() throws IOException
ShadowResourceBundle
, and reads resources from
a .properties
file with the same name as the current class.
For example, if the class is called foo.MyResource_en_US
,
reads from foo/MyResource_en_US.properties
, then
foo/MyResource_en.properties
, then
foo/MyResource.properties
.IOException
public Enumeration getKeys()
getKeys
in class ResourceBundle
protected Object handleGetObject(String key) throws MissingResourceException
handleGetObject
in class ResourceBundle
MissingResourceException
protected static ResourceBundle instance(String baseName)
baseName
resource bundle for
the current thread's locale. For example, if called with
"mondrian.olap.MondrianResource", from a thread which has called setThreadLocale(java.util.Locale)
(Locale.FRENCH
), will get an instance of
"mondrian.olap.MondrianResource_FR" from the cache.
This method should be called from a derived class, with the proper casting:
class MyResource extends ShadowResourceBundle { ... /** * Retrieves the instance of {@link MyResource} appropriate * to the current locale. If this thread has specified a locale * by calling {@link #setThreadLocale}, this locale is used, * otherwise the default locale is used. **/ public static MyResource instance() { return (MyResource) instance(MyResource.class.getName()); } ... }
protected static ShadowResourceBundle instance(String baseName, Locale locale)
baseName
resource bundle
for the given locale.
This method should be called from a derived class, with the proper casting:
class MyResource extends ShadowResourceBundle { ... /** * Retrieves the instance of {@link MyResource} appropriate * to the given locale. **/ public static MyResource instance(Locale locale) { return (MyResource) instance(MyResource.class.getName(), locale); } ... }
protected static ShadowResourceBundle instance(String baseName, Locale locale, ResourceBundle bundle)
baseName
resource bundle
for the given locale.
This method should be called from a derived class, with the proper casting:
class MyResource extends ShadowResourceBundle { ... /** * Retrieves the instance of {@link MyResource} appropriate * to the given locale. **/ public static MyResource instance(Locale locale) { return (MyResource) instance( MyResource.class.getName(), locale, ResourceBundle.getBundle(MyResource.class.getName(), locale)); } ... }
protected static Locale getThreadOrDefaultLocale()
setThreadLocale(java.util.Locale)
.public static void setThreadLocale(Locale locale)
instance(String,Locale)
.public static Locale getThreadLocale()
setThreadLocale(java.util.Locale)
.Copyright © 2012 Julian Hyde. All Rights Reserved.