package com.oopdev.io.util.bundles; import java.text.MessageFormat; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import java.util.logging.Logger; /** * * @author kamil bukum * */ public class IOUtilBundle { private static final List<String> supportLangList=new LinkedList<String>(); static { supportLangList.add("en"); supportLangList.add("tr"); } private static final Map<String, Map<String, ResourceBundle>> bundleLocaleMap=new LinkedHashMap<String, Map<String,ResourceBundle>>(); static Logger logger=Logger.getAnonymousLogger(); private ResourceBundle bundle; private String baseName; /** * * @param file * @return */ public static IOUtilBundle getInstance(String file){ if(file==null){ return null; } return new IOUtilBundle(file); } /** * * @param baseName */ private IOUtilBundle(String baseName){ if(!bundleLocaleMap.containsKey(baseName)){ bundleLocaleMap.put(baseName, new LinkedHashMap<String, ResourceBundle>()); } String locale=Locale.getDefault().getLanguage(); if(!supportLangList.contains(locale)){ if(supportLangList.size()>0){ locale=supportLangList.get(0); }else{ locale="en"; } } this.baseName=baseName; if(bundleLocaleMap.get(baseName).containsKey(locale)){ this.bundle=bundleLocaleMap.get(baseName).get(locale); }else{ try{ this.bundle=ResourceBundle.getBundle(baseName,new Locale(locale)); }catch (Exception e) { this.bundle=ResourceBundle.getBundle(baseName+"_"+locale+".properties"); } } if(this.bundle!=null&&!bundleLocaleMap.get(baseName).containsKey(locale)){ bundleLocaleMap.get(baseName).put(locale, this.bundle); } } /** * * @param propertyKey * @return */ public String getMessage(String propertyKey){ return getMesaj(propertyKey,null); } /** * * @param propertyKey * @param params * @return */ public String getMessage(String propertyKey,Object [] params){ return getMesaj(propertyKey,params); } private String getMesaj(String propertyKey,Object [] params){ try{ String paramName=bundle.getString(propertyKey); return MessageFormat.format(paramName, params); }catch (Exception e) { // TODO: handle exception logger.warning(propertyKey+" is not define in "+baseName); return propertyKey; } } }