StringManagerpublic class StringManager extends Object An internationalization / localization helper class which reduces
the bother of handling ResourceBundles and takes care of the
common cases of message formating which otherwise require the
creation of Object arrays and such.
The StringManager operates on a package basis. One StringManager
per package can be created and accessed via the getManager method
call.
The StringManager will look for a ResourceBundle named by
the package name given plus the suffix of "LocalStrings". In
practice, this means that the localized information will be contained
in a LocalStrings.properties file located in the package
directory of the classpath.
Please see the documentation for java.util.ResourceBundle for
more information. |
Fields Summary |
---|
private ResourceBundle | bundleThe ResourceBundle for this StringManager. | private static org.apache.juli.logging.Log | log | private static Hashtable | managers |
Constructors Summary |
---|
private StringManager(String packageName)Creates a new StringManager for a given package. This is a
private method and all access to it is arbitrated by the
static getManager method call so that only one StringManager
per package will be created.
String bundleName = packageName + ".LocalStrings";
try {
bundle = ResourceBundle.getBundle(bundleName);
return;
} catch( MissingResourceException ex ) {
// Try from the current loader ( that's the case for trusted apps )
ClassLoader cl=Thread.currentThread().getContextClassLoader();
if( cl != null ) {
try {
bundle=ResourceBundle.getBundle(bundleName, Locale.getDefault(), cl);
return;
} catch(MissingResourceException ex2) {
}
}
if( cl==null )
cl=this.getClass().getClassLoader();
if (log.isDebugEnabled())
log.debug("Can't find resource " + bundleName +
" " + cl);
if( cl instanceof URLClassLoader ) {
if (log.isDebugEnabled())
log.debug( ((URLClassLoader)cl).getURLs());
}
}
|
Methods Summary |
---|
public static synchronized org.apache.catalina.util.StringManager | getManager(java.lang.String packageName)Get the StringManager for a particular package. If a manager for
a package already exists, it will be reused, else a new
StringManager will be created and returned.
StringManager mgr = (StringManager)managers.get(packageName);
if (mgr == null) {
mgr = new StringManager(packageName);
managers.put(packageName, mgr);
}
return mgr;
| public java.lang.String | getString(java.lang.String key)Get a string from the underlying resource bundle.
return MessageFormat.format(getStringInternal(key), (Object [])null);
| public java.lang.String | getString(java.lang.String key, java.lang.Object[] args)Get a string from the underlying resource bundle and format
it with the given set of arguments.
String iString = null;
String value = getStringInternal(key);
// this check for the runtime exception is some pre 1.1.6
// VM's don't do an automatic toString() on the passed in
// objects and barf out
try {
// ensure the arguments are not null so pre 1.2 VM's don't barf
Object nonNullArgs[] = args;
for (int i=0; i<args.length; i++) {
if (args[i] == null) {
if (nonNullArgs==args) nonNullArgs=(Object[])args.clone();
nonNullArgs[i] = "null";
}
}
iString = MessageFormat.format(value, nonNullArgs);
} catch (IllegalArgumentException iae) {
StringBuffer buf = new StringBuffer();
buf.append(value);
for (int i = 0; i < args.length; i++) {
buf.append(" arg[" + i + "]=" + args[i]);
}
iString = buf.toString();
}
return iString;
| public java.lang.String | getString(java.lang.String key, java.lang.Object arg)Get a string from the underlying resource bundle and format it
with the given object argument. This argument can of course be
a String object.
Object[] args = new Object[] {arg};
return getString(key, args);
| public java.lang.String | getString(java.lang.String key, java.lang.Object arg1, java.lang.Object arg2)Get a string from the underlying resource bundle and format it
with the given object arguments. These arguments can of course
be String objects.
Object[] args = new Object[] {arg1, arg2};
return getString(key, args);
| public java.lang.String | getString(java.lang.String key, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3)Get a string from the underlying resource bundle and format it
with the given object arguments. These arguments can of course
be String objects.
Object[] args = new Object[] {arg1, arg2, arg3};
return getString(key, args);
| public java.lang.String | getString(java.lang.String key, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4)Get a string from the underlying resource bundle and format it
with the given object arguments. These arguments can of course
be String objects.
Object[] args = new Object[] {arg1, arg2, arg3, arg4};
return getString(key, args);
| protected java.lang.String | getStringInternal(java.lang.String key)
if (key == null) {
String msg = "key is null";
throw new NullPointerException(msg);
}
String str = null;
if( bundle==null )
return key;
try {
str = bundle.getString(key);
} catch (MissingResourceException mre) {
str = "Cannot find message associated with key '" + key + "'";
}
return str;
|
|