package org.akaza.openclinica.i18n.util; import java.util.HashMap; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; public class ResourceBundleProvider { /** * A Map of the locales corresponding to each Thread. * * @author Nacho M. Castejon and Jose Martinez Garcia, BAP Health */ public static HashMap<Thread, Locale> localeMap = new HashMap<Thread, Locale>(); /** * Contains the set of ResourceBundles associated to each locale. */ static HashMap<Locale, HashMap<String, ResourceBundle>> resBundleSetMap = new HashMap<Locale, HashMap<String, ResourceBundle>>(); public static void updateLocale(Locale l) { //logger.info("* found locale " + l.getDisplayCountry() + " " + l.getDisplayLanguage()); localeMap.put(Thread.currentThread(), l); if (!resBundleSetMap.containsKey(l)) { HashMap<String, ResourceBundle> resBundleSet = new HashMap<String, ResourceBundle>(); resBundleSet.put("org.akaza.openclinica.i18n.admin", ResourceBundle.getBundle("org.akaza.openclinica.i18n.admin", l)); resBundleSet.put("org.akaza.openclinica.i18n.audit_events", ResourceBundle.getBundle("org.akaza.openclinica.i18n.audit_events", l)); resBundleSet.put("org.akaza.openclinica.i18n.exceptions", ResourceBundle.getBundle("org.akaza.openclinica.i18n.exceptions", l)); resBundleSet.put("org.akaza.openclinica.i18n.format", ResourceBundle.getBundle("org.akaza.openclinica.i18n.format", l)); resBundleSet.put("org.akaza.openclinica.i18n.page_messages", ResourceBundle.getBundle("org.akaza.openclinica.i18n.page_messages", l)); resBundleSet.put("org.akaza.openclinica.i18n.notes", ResourceBundle.getBundle("org.akaza.openclinica.i18n.notes", l)); resBundleSet.put("org.akaza.openclinica.i18n.terms", ResourceBundle.getBundle("org.akaza.openclinica.i18n.terms", l)); resBundleSet.put("org.akaza.openclinica.i18n.words", ResourceBundle.getBundle("org.akaza.openclinica.i18n.words", l)); resBundleSet.put("org.akaza.openclinica.i18n.workflow", ResourceBundle.getBundle("org.akaza.openclinica.i18n.workflow", l)); resBundleSet.put("org.akaza.openclinica.i18n.licensing", ResourceBundle.getBundle("org.akaza.openclinica.i18n.licensing", l)); resBundleSetMap.put(l, resBundleSet); } } public static Locale getLocale() { return localeMap.get(Thread.currentThread()); } public static ResourceBundle getAdminBundle() { return getResBundle("org.akaza.openclinica.i18n.admin"); } public static ResourceBundle getAdminBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.admin", locale); } public static ResourceBundle getAuditEventsBundle() { return getResBundle("org.akaza.openclinica.i18n.audit_events"); } public static ResourceBundle getAuditEventsBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.audit_events", locale); } public static ResourceBundle getExceptionsBundle() { return getResBundle("org.akaza.openclinica.i18n.exceptions"); } public static ResourceBundle getExceptionsBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.exceptions", locale); } public static ResourceBundle getFormatBundle() { return getResBundle("org.akaza.openclinica.i18n.format"); } public static ResourceBundle getFormatBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.format", locale); } public static ResourceBundle getPageMessagesBundle() { return getResBundle("org.akaza.openclinica.i18n.page_messages"); } public static ResourceBundle getPageMessagesBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.page_messages", locale); } public static ResourceBundle getTermsBundle() { return getResBundle("org.akaza.openclinica.i18n.terms"); } public static ResourceBundle getTermsBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.terms", locale); } public static ResourceBundle getWordsBundle() { return getResBundle("org.akaza.openclinica.i18n.words"); } public static ResourceBundle getWordsBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.words", locale); } public static ResourceBundle getTextsBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.notes", locale); } public static ResourceBundle getTextsBundle() { return getResBundle("org.akaza.openclinica.i18n.notes"); } public static ResourceBundle getWorkflowBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.workflow", locale); } public static ResourceBundle getLicensingBundle() { return getResBundle("org.akaza.openclinica.i18n.licensing"); } public static ResourceBundle getLicensingBundle(Locale locale) { return getResBundle("org.akaza.openclinica.i18n.licensing", locale); } /** * Returns the required bundle, using the current thread to determine the * appropiate locale. * * @param name * requested bundle name. * @return */ private static ResourceBundle getResBundle(String name) { return resBundleSetMap.get(localeMap.get(Thread.currentThread())).get(name); } /** * * @param name * Required bundle name * @param locale * Required locale * @return The corresponding ResourceBundle */ private static ResourceBundle getResBundle(String name, Locale locale) { return resBundleSetMap.get(locale).get(name); } /** * * @param key * @return If found, the value associated with the key in the Admin * ResourceBundle else, the key. */ public static String getResAdmin(String key) { String value; try { value = getAdminBundle().getString(key); } catch (MissingResourceException mre) { value = key; } return value; } /** * * @param key * @return If found, the value associated with the key in the Term * ResourceBundle else, the key. */ public static String getResTerm(String key) { String value; try { value = getResBundle("org.akaza.openclinica.i18n.terms").getString(key); } catch (MissingResourceException mre) { value = key; } return value; } public static String getResWord(String key) { String value; try { value = getResBundle("org.akaza.openclinica.i18n.words").getString(key); } catch (MissingResourceException mre) { value = key; } return value; } }