[ 
https://issues.apache.org/jira/browse/SLING-3407?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Klimetschek updated SLING-3407:
-----------------------------------------

    Attachment: SLING-3407.patch

Here is a quick patch (compiles & tests success, but not fully tested in 
reality yet): [^SLING-3407.patch]

There are 2 open questions:

1) getDefaultLocale() method: do we need that anymore? I don't think a provider 
should be responsible for the default locale, and with multiple providers it 
doesn't really make sense anymore. Currently it is a fixed configuration on the 
JcrResourceBundleProvider and used as a fallback in case a "null" locale is 
passed to the provider. But IMO this needs to be handled at higher levels, such 
as the request object, which already does that - if you pass null as locale, it 
will use the request.getLocale() method which has its own resolution.

getDefaultLocale() is used in the I18nFilter though, as a default fallback for 
request.getLocale() in some cases (in case it's not a SlingHttpServletRequest 
afaics). But this is after the RequestLocaleResolver returned null - and I 
don't think this needs another fallback. One should have the default fallback 
over in the RequestLocaleResolver.

Long story short: don't have getDefaultLocale() on the new RBManager (note: 
it's currently in the patch), and deprecate it on the RBProvider interface.

2) BUNDLE_REQ_ATTR constant: I moved it over to the new RBManager interface and 
deprecated it on the RBProvider. But it seems it is not really used - the 
I18nFilter only reads it from the request attributes, but it never writes it. 
So application code would have to set it itself, not sure if that is a frequent 
thing to do.

So it might be ok to just keep it on the RBProvider for backwards compatibility 
and not bring it over and promote it further on RBManager.

> ResourceBundleManager API
> -------------------------
>
>                 Key: SLING-3407
>                 URL: https://issues.apache.org/jira/browse/SLING-3407
>             Project: Sling
>          Issue Type: New Feature
>          Components: Extensions
>            Reporter: Alexander Klimetschek
>              Labels: i18n
>         Attachments: SLING-3407.patch
>
>
> Currently there is the ResourceBundleProvider service interface, which really 
> is an SPI, now that you can have multiple of them. The right way of accessing 
> them is to get all service references, sort by service ranking (highest 
> first) and then take the result from the first one that doesn't give you a 
> null result (null resource bundle from getResourceBundle()). This is done in 
> the I18nFilter and is quite a bit of boilerplate that client code should not 
> have to worry about.
> Thus there should be a new API, something like a ResourceBundleManager with 
> the 2 methods for getResourceBundle() (with basename and without).
> [1] 
> http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/I18NFilter.java



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to