vulcan

          低頭做事,抬頭看路

             :: 首頁 :: 聯系 :: 聚合  :: 管理
            41 Posts :: 7 Stories :: 28 Comments :: 0 Trackbacks
          需要這個功能,但是卻發現gnu提供的,還是sun的ResourceBundle都不是怎么好用,所以根據需要在resourceBundle的基礎上封裝了一下。
          package com.csair.hunan.common;

          import java.util.MissingResourceException;
          import java.util.ResourceBundle;

          /**
           * gettext支持類
           * 主要功能:可以自動獲取調用者信息,從而自動的根據local尋找resource
           * (1) 查找和類名相同的properties文件
           * (2) 如果(1)失敗,則默認查找調用者包中的message.properties文件
           * 如果找不到相應的key,不拋出異常,而是返回msgId
           * 另外它支持msgId帶空格,但是在properties文件中,必須把空格全部替換成下劃線
           * 
          @author Alva
           * 
           
          */
          public class I18NUtils {
              
          /* A static instance holding the message */
              
          //multi-thread safety?
              public static final ThreadLocal resPool = new ThreadLocal();
              
          public static final ThreadLocal callerPool = new ThreadLocal();

              @SuppressWarnings(
          "unchecked")
              
          public static String _(String s) {
                  
          //get the direct caller class - FIXME how to deal with extend?
                  Class caller = sun.reflect.Reflection.getCallerClass(2);
                  ResourceBundle resourceBundle 
          = (ResourceBundle)resPool.get();
                  
          //if no resourcebundle or the caller changed
                  
          //initial a new resource bundle
                  if(resourceBundle == null || !caller.equals(callerPool.get())) {
                      
          try {
                          
          // first try the property file who with the same name with the caller class
                          resourceBundle = ResourceBundle.getBundle(caller.getCanonicalName());
                      } 
          catch(MissingResourceException missingresourceexception) {
                          
          try {
                              
          //find the default: package
                              resourceBundle = ResourceBundle.getBundle(caller.getPackage().getName() + ".message");
                          } 
          catch (MissingResourceException e) {
                              
          //do nothing, just suppress the exception, omit the missed resource
                          }

                      }
                      resPool.set(resourceBundle);
                      
          //record the new caller
                      callerPool.set(caller);
                  }
                  
          try
                  {
                      
          // replace key's blank
                      String s1 = (String)resourceBundle.getObject(s.trim().replaceAll("\\p{Blank}+""_"));
                      
          if(s1 != null)
                          
          return s1;
                  }
                  
          catch(MissingResourceException missingresourceexception) { }
                  
          return s;
              }
          }
          使用起來很方便,在需要使用的類中
          import static com.csair.hunan.common.I18NUtils._;
          //
          System.out.println(_("msgId"));
          不過還欠缺一點功能:對于翻譯文本中數字參數等的支持,需要加強
          posted on 2008-03-21 18:13 vulcan 閱讀(973) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 峨眉山市| 阿克苏市| 浮山县| 湘潭县| 九江县| 榆中县| 阿克苏市| 襄城县| 台北县| 穆棱市| 三穗县| 奈曼旗| 淮阳县| 虞城县| 潍坊市| 益阳市| 丰顺县| 大悟县| 隆回县| 襄樊市| 崇仁县| 穆棱市| 南昌县| 翁牛特旗| 娱乐| 上思县| 林西县| 铜梁县| 新晃| 丽水市| 灵台县| 丹江口市| 繁峙县| 盈江县| 晋城| 光泽县| 谷城县| 石阡县| 定日县| 江孜县| 九龙城区|