/* * ResourceBundleUtils.java * */ package org.smartly.commons.i18n.utils; import org.smartly.commons.i18n.resourcebundle.bundle.IResourceBundle; import org.smartly.commons.i18n.resourcebundle.bundle.impl.ClassResourceBundle; import org.smartly.commons.i18n.resourcebundle.bundle.impl.FileResourceBundle; import org.smartly.commons.i18n.resourcebundle.cache.ResourceBundleCache; import java.util.Locale; /** * */ public abstract class I18nUtils { public static IResourceBundle getOrCreateBundle(final String baseName, final Locale locale, final ClassLoader classloader) throws Exception { final String key = I18nUtils.buildResourceBundleKey(baseName, locale); // search rb in repository IResourceBundle result = ResourceBundleCache.get(key); // create rb and add to repository if (null == result) { result = new ClassResourceBundle(baseName, locale, classloader); if (result.isActive()) { ResourceBundleCache.add(key, result); } else { result = new FileResourceBundle(baseName, locale); if (result.isActive()) ResourceBundleCache.add(key, result); } } // rethrow bundle exception if (null != result && null != result.getError()) { throw new Exception(result.getError()); } return result; } public static String buildResourceBundleKey(final String baseName, final Locale locale) { return null != locale ? baseName.concat(":"). concat(locale.getDisplayCountry()).concat(":"). concat(locale.getDisplayLanguage()) : baseName; } public static String buildResourceKey(final String baseName, final String labelName, final Locale locale) { return null != locale ? baseName.concat(":"). concat(labelName).concat(":"). concat(locale.getDisplayCountry()).concat(":"). concat(locale.getDisplayLanguage()) : baseName.concat(":").concat(labelName); } }