vulcan

          低頭做事,抬頭看路

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

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

          /**
           * gettext支持類
           * 主要功能:可以自動獲取調(diào)用者信息,從而自動的根據(jù)local尋找resource
           * (1) 查找和類名相同的properties文件
           * (2) 如果(1)失敗,則默認查找調(diào)用者包中的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"));
          不過還欠缺一點功能:對于翻譯文本中數(shù)字參數(shù)等的支持,需要加強
          posted on 2008-03-21 18:13 vulcan 閱讀(978) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 泰兴市| 民乐县| 东丽区| 凭祥市| 额济纳旗| 加查县| 柳河县| 乌海市| 宜都市| 江源县| 开鲁县| 肇州县| 佛山市| 穆棱市| 吉林市| 聊城市| 陆良县| 邮箱| 大安市| 开化县| 广东省| 佛冈县| 台东市| 张家口市| 武功县| 贵溪市| 龙川县| 景宁| 连江县| 南宁市| 夏河县| 南木林县| 阳山县| 咸阳市| 曲水县| 从江县| 海晏县| 江安县| 贵德县| 建湖县| 林甸县|