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 Locale | locale | 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.
this( packageName, Locale.getDefault() );
| private StringManager(String packageName, Locale loc)
String bundleName = packageName + ".LocalStrings";
bundle = ResourceBundle.getBundle(bundleName, loc);
// Get the actual locale, which may be different from the requested one
locale = bundle.getLocale();
| private StringManager(ResourceBundle bundle)
this.bundle=bundle;
locale = bundle.getLocale();
|
Methods Summary |
---|
public static synchronized org.apache.tomcat.util.res.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 static synchronized org.apache.tomcat.util.res.StringManager | getManager(java.util.ResourceBundle bundle)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.
return new StringManager( bundle );
| public static synchronized org.apache.tomcat.util.res.StringManager | getManager(java.lang.String packageName, java.util.Locale loc)Get the StringManager for a particular package and Locale. If a manager for
a package already exists, it will be reused, else a new
StringManager will be created for that Locale and returned.
StringManager mgr = (StringManager)managers.get(packageName+"_"+loc.toString());
if (mgr == null) {
mgr = new StringManager(packageName,loc);
managers.put(packageName+"_"+loc.toString(), mgr);
}
return mgr;
| public java.lang.String | getString(java.lang.String key)Get a string from the underlying resource bundle or return
null if the String is not found.
if(key == null){
String msg = "key may not have a null value";
throw new IllegalArgumentException(msg);
}
String str = null;
try{
str = bundle.getString(key);
}catch(MissingResourceException mre){
//bad: shouldn't mask an exception the following way:
// str = "[cannot find message associated with key '" + key + "' due to " + mre + "]";
// because it hides the fact that the String was missing
// from the calling code.
//good: could just throw the exception (or wrap it in another)
// but that would probably cause much havoc on existing
// code.
//better: consistent with container pattern to
// simply return null. Calling code can then do
// a null check.
str = null;
}
return str;
| 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 = getString(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
if(args==null){
args = new Object[1];
}
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";
}
}
if( value==null ) value=key;
MessageFormat mf = new MessageFormat(value);
mf.setLocale(locale);
iString = mf.format(nonNullArgs, new StringBuffer(), null).toString();
} 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);
|
|