package net.jhorstmann.i18n.jsp;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import net.jhorstmann.i18n.ResourceBundleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RequestResourceBundleProvider implements ResourceBundleProvider {
private static final Logger log = LoggerFactory.getLogger(RequestResourceBundleProvider.class);
static ResourceBundle loadBundle(String bundleName, Locale locale) {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
ResourceBundle.Control control = ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_DEFAULT);
log.debug("Loading ResourceBundle {} for locale {}", bundleName, locale);
return ResourceBundle.getBundle(bundleName, locale, cl, control);
}
public static ResourceBundle getResourceBundle(HttpServletRequest req, Locale locale) {
ResourceBundle bundle = (ResourceBundle) req.getAttribute(I18nFilter.KEY_RESOURCE_BUNDLE);
if (bundle == null) {
String bundleName = (String) req.getAttribute(I18nFilter.KEY_RESOURCE_BUNDLE_NAME);
if (bundleName != null) {
bundle = loadBundle(bundleName, locale);
req.setAttribute(I18nFilter.KEY_RESOURCE_BUNDLE, bundle);
} else {
log.warn("No ResourceBundle name configured");
}
}
return bundle;
}
@Override
public ResourceBundle getResourceBundle(Locale locale) {
HttpServletRequest currentRequest = I18nFilter.getCurrentRequest();
return getResourceBundle(currentRequest, locale);
}
}