package net.loyin.util; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.text.MessageFormat; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.apache.commons.io.IOUtils; /** * 国际化资源工具类 * @author liudong */ public class ResourceUtils { private final static MyResourceBundleControl ctl = new MyResourceBundleControl(); /** * 返回 {res}.properties 中 key 对应的值 * @param baseName * @param key * @return */ public static String getString(String baseName, String key) { return _getStringForLocale(Locale.getDefault(), baseName ,key); } public static String ui(String key){ return getString("ui", key); } /** * 返回 {res}.properties 中 key 对应的值 * @param locale * @param baseName * @param key * @return */ private static String _getStringForLocale(Locale locale, String baseName, String key) { try{ ResourceBundle rb = ResourceBundle.getBundle(baseName, locale, ResourceUtils.class.getClassLoader(), ctl); return (rb != null)?rb.getString(key):null; }catch(MissingResourceException e){ return null; }catch(NullPointerException e){ return null; } } /** * 返回 {res}.properties 中 key 对应的值,并对值进行参数格式化 * @param baseName * @param key * @param args * @return */ public static String getString(String baseName, String key, Object...args) { String text = getString(baseName, key); return (text!=null)?MessageFormat.format(text, args):null; } /** * 返回 {res}.properties 中 key 对应的值,并对值进行参数格式化 * @param locale * @param baseName * @param key * @param args * @return */ public static String getStringForLocale(Locale locale, String baseName, String key, Object...args) { String text = _getStringForLocale(locale, baseName, key); return (text!=null)?MessageFormat.format(text, args):null; } public static String loadFromResource(String resource) { InputStream in = null; BufferedReader reader = null; try { in = new FileInputStream(resource); reader = new BufferedReader(new InputStreamReader(in, "utf-8")); return IOUtils.toString(reader); } catch (Exception excp) { throw new RuntimeException(excp); } finally { IOUtils.closeQuietly(reader); IOUtils.closeQuietly(in); reader = null; } } /** * 重载控制器,每1个小时重载一次 * @author Winter Lau * @date 2010-5-12 下午11:20:02 */ private static class MyResourceBundleControl extends ResourceBundle.Control { /** * 每1个小时重载一次 */ @Override public long getTimeToLive(String baseName, Locale locale) { return 3600000; } @Override public boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime) { return true; } } }