修改jFinal的I18N类为instance方式使用

public class I18N
{
   private String baseName;
   private Locale defaultLocale = Locale.getDefault();
   private int i18nMaxAgeOfCookie = Const.DEFAULT_I18N_MAX_AGE_OF_COOKIE;
   private static final NullResourceBundle NULL_RESOURCE_BUNDLE = new NullResourceBundle();
   private static final ConcurrentMap<String, ResourceBundle> bundlesMap = new ConcurrentHashMap<String, ResourceBundle>();
   
   private I18N() {
   }
   
   public static I18N getInstance(String baseName, Locale defaultLocale, Integer i18nMaxAgeOfCookie) {
      I18N me = new I18N();
      me.baseName = baseName;
      me.defaultLocale = defaultLocale;
      if (i18nMaxAgeOfCookie != null)
         me.i18nMaxAgeOfCookie = i18nMaxAgeOfCookie;
       return me;
   }
   
   public Locale getDefaultLocale() {
       return defaultLocale;
   }
   
   final public int getI18nMaxAgeOfCookie() {
       return i18nMaxAgeOfCookie;
   }
   
   private ResourceBundle getResourceBundle(Locale locale) {
       String resourceBundleKey = getresourceBundleKey(locale);
       ResourceBundle resourceBundle = bundlesMap.get(resourceBundleKey);
       if (resourceBundle == null) {
           try {
               resourceBundle = ResourceBundle.getBundle(baseName, locale);
               bundlesMap.put(resourceBundleKey, resourceBundle);
           }
           catch (MissingResourceException e) {
               resourceBundle = NULL_RESOURCE_BUNDLE;
           }
       }
       return resourceBundle;
   }
   
   private String getresourceBundleKey(Locale locale) {
       return baseName +  locale.toString();
   }
   
   public String getText(String key) {
       return getResourceBundle(defaultLocale).getString(key);
   }
   
   public String getText(String key, String defaultValue) {
       String result = getResourceBundle(defaultLocale).getString(key);
       return result != null ? result : defaultValue;
   }
   
   public String getText(String key, Locale locale) {
       return getResourceBundle(locale).getString(key);
   }
   
   public String getText(String key, String defaultValue, Locale locale) {
       String result = getResourceBundle(locale).getString(key);
       return result != null ? result : defaultValue;
   }
   
   public Locale localeFromString(String localeStr) {
       if ((localeStr == null) || (localeStr.trim().length() == 0) || ("_".equals(localeStr))) {
           return defaultLocale;
       }
       
       int index = localeStr.indexOf('_');
       if (index < 0) {
           return new Locale(localeStr);
       }
       
       String language = localeStr.substring(0, index);
       if (index == localeStr.length()) {
           return new Locale(language);
       }
       
       localeStr = localeStr.substring(index + 1);
       index = localeStr.indexOf('_');
       if (index < 0) {
           return new Locale(language, localeStr);
       }
       
       String country = localeStr.substring(0, index);
       if (index == localeStr.length()) {
           return new Locale(language, country);
       }
       
       localeStr = localeStr.substring(index + 1);
       return new Locale(language, country, localeStr);
   }
   
   private static class NullResourceBundle extends ResourceBundle {
       public Enumeration<String> getKeys() {
           return null; // dummy
       }
       protected Object handleGetObject(String key) {
           return null; // dummy
       }
   }
}


你可能感兴趣的:(jFinal,i18n)