All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.jhorstmann.i18n.jsf.FacesResourceBundle Maven / Gradle / Ivy

The newest version!
package net.jhorstmann.i18n.jsf;

import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;

import javax.faces.context.FacesContext;

import net.jhorstmann.i18n.I18N;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Tries to look up a ResourceBundle with the basename configured using the {@value #KEY_RESOURCE_BUNDLE} init parameter in web.xml. If that fails it uses the
 * value of the {@value #KEY_RESOURCE_BUNDLE_VAR} init parameter to get a ResourceBundle using
 * {@link javax.faces.application.Application#getResourceBundle(javax.faces.context.FacesContext, java.lang.String)}.
 * 
 * @author Jörn Horstmann
 */
public class FacesResourceBundle {
    private static final Logger log = LoggerFactory.getLogger(FacesResourceBundle.class);

    public static final String DEFAULT_RESOURCE_BUNDLE_VAR = "i18n";
    public static final String KEY_RESOURCE_BUNDLE = "net.jhorstmann.i18n.ResourceBundle";
    public static final String KEY_RESOURCE_BUNDLE_VAR = "net.jhorstmann.i18n.ResourceBundleVar";

    private FacesResourceBundle() {

    }

    private static ResourceBundle getResourceBundleImpl(FacesContext ctx, Locale locale) {
        String bundleName = ctx.getExternalContext().getInitParameter(KEY_RESOURCE_BUNDLE);
        if (bundleName != null) {
            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);
        } else {
            String bundleVar = ctx.getExternalContext().getInitParameter(KEY_RESOURCE_BUNDLE_VAR);
            if (bundleVar == null) {
                bundleVar = DEFAULT_RESOURCE_BUNDLE_VAR;
            }
            log.debug("Loading ResourceBundle {} from Application", bundleVar);
            ResourceBundle bundle = ctx.getApplication().getResourceBundle(ctx, bundleVar);
            return bundle;
        }
    }

    public static ResourceBundle getResourceBundle(FacesContext ctx, Locale locale) {
        if (log.isDebugEnabled()) {
            log.debug("Lookup for resource-bundle over FacesContext with key=<{}>", KEY_RESOURCE_BUNDLE);
        }
        Map attrs = ctx.getAttributes();
        ResourceBundle bundle = (ResourceBundle) attrs.get(KEY_RESOURCE_BUNDLE);
        if (bundle == null) {
            bundle = getResourceBundleImpl(ctx, locale);
            attrs.put(KEY_RESOURCE_BUNDLE, bundle);
        }
        return bundle;
    }

    public static ResourceBundle getResourceBundle(FacesContext ctx) {
        return getResourceBundle(ctx, FacesLocale.getLocale(ctx));
    }

    public static ResourceBundle getResourceBundle() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        return getResourceBundle(ctx, FacesLocale.getLocale(ctx));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy