Properly provide locale inheritance support
-------------------------------------------
Key: SLING-2047
URL: https://issues.apache.org/jira/browse/SLING-2047
Project: Sling
Issue Type: Improvement
Components: Extensions
Affects Versions: I18n 2.0.4
Reporter: Felix Meschberger
Fix For: I18n 2.0.6
The ResourceBundle class is intended to be used with inheritance of resources
from parent resource bundles. Thus the ResourceBundle.getObject(String) is
implemented along these lines:
Object obj = handleGetObject(key);
if (obj == null) {
if (parent != null) {
obj = parent.getObject(key);
}
if (obj == null) {
throw new MissingResourceException(...)
}
}
return obj;
The JcrResourceBundle.handleObject(String key) method is implemented like this:
Object value = // get from the repository resources
return (value == null) ? key : value;
That is the key is returned if there is no value. This, though, breaks the
inheritance chain intended by the ResourceBundle.getObject(String) method. We
should fix this along these lines:
* The JcrResourceBundleProvider provides a root ResourceBundle implementation
as follows:
- handleObject(String key) always returns the key
- getLocale() returns an empty Locale
- getKeys() always returns an empty enumeration
* The root ResourceBundle is used as the parent for all JcrResourceBundle
instances which have no Locale induced parent
* JcrResourceBundle.handleGetObject(String key) only returns the value for the
given locale
This way we can keep the guarantee that getObject(String key) method of a
ResourceBundle provided by the JcrResourceBundleProvider never throws a
MissingResourceException.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira