LocalStringManagerImplpublic class LocalStringManagerImpl extends Object implements LocalStringManagerImplementation of a local string manager.
Provides access to i18n messages for classes that need them. |
Fields Summary |
---|
private static Logger | _logger | private Class | defaultClass |
Constructors Summary |
---|
public LocalStringManagerImpl(Class defaultClass)Create a string manager that looks for LocalStrings.properties in
the package of the defaultClass.
this.defaultClass = defaultClass;
|
Methods Summary |
---|
public java.lang.String | getLocalString(java.lang.Class callerClass, java.lang.String key, java.lang.String defaultValue)Get a localized string.
Strings are stored in a single property file per package named
LocalStrings[_locale].properties. Starting from the class of the
caller, we walk up the class hierarchy until we find a package
resource bundle that provides a value for the requested key.
This simplifies access to resources, at the cost of checking for
the resource bundle of several classes upon each call. However, due
to the caching performed by ResourceBundle this seems
reasonable.
Due to that, sub-classes must make sure they don't
have conflicting resource naming.
Class stopClass = defaultClass.getSuperclass();
Class startClass = ((callerClass != null) ? callerClass :
defaultClass);
ResourceBundle resources = null;
boolean globalDone = false;
for (Class c = startClass;
c != stopClass && c != null;
c = c.getSuperclass()) {
globalDone = (c == defaultClass);
try {
// Construct the bundle name as LocalStrings in the
// caller class's package.
StringBuffer resFileName = new StringBuffer(
c.getName().substring(0, c.getName().lastIndexOf(".")));
resFileName.append(".LocalStrings");
resources = ResourceBundle.getBundle(resFileName.toString());
if ( resources != null ) {
String value = resources.getString(key);
if ( value != null )
return value;
}
} catch (Exception ex) {
}
}
// Look for a global resource (defined by defaultClass)
if ( ! globalDone ) {
return getLocalString(null, key, defaultValue);
} else {
/** IASRI 4660742
System.err.println("No local string for " + key);
**/
//START OF IASRI 4660742
if (getLogger().isLoggable(Level.FINE))
getLogger().log(Level.FINE,"No local string for " + key);
//END OF IASRI 4660742
return defaultValue;
}
| public java.lang.String | getLocalString(java.lang.String key, java.lang.String defaultValue)Get a localized string from the package of the default class.
return getLocalString(null, key, defaultValue);
| public java.lang.String | getLocalString(java.lang.Class callerClass, java.lang.String key, java.lang.String defaultFormat, java.lang.Object[] arguments)Get a local string for the caller and format the arguments accordingly.
MessageFormat f = new MessageFormat(
getLocalString(callerClass, key, defaultFormat));
for (int i = 0; i < arguments.length; i++) {
if ( arguments[i] == null ) {
arguments[i] = "null";
} else if ( !(arguments[i] instanceof String) &&
!(arguments[i] instanceof Number) &&
!(arguments[i] instanceof java.util.Date)) {
arguments[i] = arguments[i].toString();
}
}
return f.format(arguments);
| public java.lang.String | getLocalString(java.lang.String key, java.lang.String defaultFormat, java.lang.Object[] arguments)Get a local string from the package of the default class and
format the arguments accordingly.
return getLocalString(null, key, defaultFormat, arguments);
| private static java.util.logging.Logger | getLogger()
//No need to worry about synchronization here as getLogger call is
//synchronized, worse case logger will get initialized to the same
//value 2x.
if (_logger == null) {
_logger=LogDomains.getLogger(LogDomains.UTIL_LOGGER);
}
return _logger;
|
|