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支持類
           * 主要功能:可以自動獲取調用者信息,從而自動的根據(jù)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"));
          不過還欠缺一點功能:對于翻譯文本中數(shù)字參數(shù)等的支持,需要加強
          posted on 2008-03-21 18:13 vulcan 閱讀(973) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 黎城县| 沁水县| 永城市| 临夏县| 永寿县| 南汇区| 衡阳县| 汶川县| 南陵县| 德保县| 汉阴县| 巴马| 西宁市| 托克托县| 沭阳县| 集安市| 包头市| 琼中| 洛扎县| 永川市| 金坛市| 吉木乃县| 师宗县| 连城县| 裕民县| 大余县| 阿合奇县| 益阳市| 于田县| 分宜县| 咸阳市| 迁西县| 辰溪县| 阜康市| 金湖县| 鹰潭市| 樟树市| 巩义市| 吉水县| 桃江县| 三门峡市|