專(zhuān)注于java技術(shù)

           

          struts用資源文件國(guó)際化

          import java.util.ArrayList;
          import java.util.List;
          import java.util.Locale;
          import java.util.ResourceBundle;

          import sun.util.ResourceBundleEnumeration;

          public class ReadBundle {

           /**
            * @param selectName,bundleName
            * @return
            */
           
           public List getKeys(String selectName,String bundleName){
            //切忌不要忘記ArrayList的初始化.否則問(wèn)題嚴(yán)重大了..這是一個(gè)慘痛的教訓(xùn).
            ArrayList  keys = new ArrayList();
            //根據(jù)提供的bundleName創(chuàng)建一個(gè)ResourceBundle
            System.out.println(bundleName);
            ResourceBundle bundle = ResourceBundle.getBundle("com.bookshop.struts." + bundleName);
            //將bundle中的keys通過(guò)方法getKeys()給取出來(lái),放到一個(gè)枚舉類(lèi)型的表里.
            ResourceBundleEnumeration keyList = (ResourceBundleEnumeration)bundle.getKeys();//獲取bundle中所有的鍵值.
            //創(chuàng)建一個(gè)局部變量key,用于暫存bundle中的一個(gè)key.
            String key = null;
            /*
             * 遍歷鍵值表,找出鍵值對(duì)應(yīng)value與selectName相同,或selectName是value子串的key.添加到keys里
             */
            
            while(keyList.hasMoreElements()){
             //逐個(gè)取出枚舉表中的key值.
             key = (String)keyList.nextElement() ;
             //用bundle的getString()方法得到key對(duì)應(yīng)的value./
             /*
              * 因?yàn)樵谫Y源文件里,存儲(chǔ)方式是  key<-->value  即 鍵<-->值 對(duì).
              */
          //   System.out.println(key);
             String value = bundle.getString(key);
           
             //判斷,如果根據(jù)key得出來(lái)的value 中包含給出的待選名字,或者正好等于給定的待選名字.那么,就把此key添加到keys表里,備返回.
             if( (value.contains(selectName)) || (value.equalsIgnoreCase(selectName)) ){
              System.out.println(key);
              keys.add(key);

             }
             
            }
            
            return keys;//返回所需的鍵值表.
           }

           /*
            * 判斷該執(zhí)行哪一個(gè)bundle來(lái)獲取keys表.
            *
            */
           /**
            * @return keys
            */
           public List judgeBundle(Locale locale , String selectName){
            List keys = null;

            String language = locale.getCountry();
          //  System.out.println(language);
          //  switch(language){
          //  case "zh-cn" : keys = getKeys(selectName,"");break;
          //  default: keys = getKeys(selectName,"");
          //  }
            if(language.equals("") || language == null){
             keys = getKeys(selectName,"ApplicationResources_en");
            }
            else if(language.equalsIgnoreCase("cn") || language.equalsIgnoreCase("zh")){
             keys = getKeys(selectName,"ApplicationResources_zh_CN");
            }
            else if(language.equalsIgnoreCase("en")){
             keys = getKeys(selectName,"ApplicationResources_en");
            }
            else{
             keys = getKeys(selectName,"ApplicationResources_en");
             
            }
            return keys;
           }

          }
          因?yàn)檫@個(gè)國(guó)際化,是通過(guò)資源文件實(shí)現(xiàn),即數(shù)據(jù)庫(kù)只存儲(chǔ)  一串英文符號(hào)代碼,具體的內(nèi)容在資源文件里實(shí)現(xiàn)。比如,數(shù)據(jù)庫(kù)里有一個(gè)bookName字段,那么在數(shù)據(jù)庫(kù)表里,可能存儲(chǔ)的是bookName,而在資源文件里得如下配置:bookName=Thingking in java(英文資源文件)bookName=java編程思想(中文資源文件)。。。等等。在頁(yè)面上寫(xiě)<bean:message name="book" property="bookName" />(假如bookName是一個(gè)名為book的javabean的一個(gè)字段)。這樣,在按名字查詢(xún)的時(shí)候,就得到資源文件里匹配,而不是到數(shù)據(jù)庫(kù)里。上面寫(xiě)的那個(gè)類(lèi)就是讀取資源文件的,然后根據(jù)value尋找key。
          找到key以后,就找到要查詢(xún)的東東了。
          但是,有個(gè)地方?jīng)]想好。就是,分頁(yè)查詢(xún)的時(shí)候,這個(gè)不能一次查詢(xún)n條記錄,而是一次性全部查詢(xún),當(dāng)數(shù)據(jù)量大的時(shí)候,可能第一次查詢(xún)會(huì)很慢。  我想了一個(gè)辦法,還沒(méi)有試行。就是,自己寫(xiě)一個(gè)讀取文件的類(lèi),在讀取了n條符合條件的記錄后,將第n條記錄的下一行行號(hào)記錄下來(lái),下一頁(yè)查詢(xún)的時(shí)候,從記錄的行號(hào)繼續(xù)往下查詢(xún)。不過(guò),我在文件這方面學(xué)的不精,是以沒(méi)寫(xiě)出來(lái)。
          請(qǐng)大家指正。

          posted on 2007-12-06 17:04 jackey 閱讀(393) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 调兵山市| 城步| 浪卡子县| 江阴市| 酒泉市| 临泉县| 汨罗市| 涟源市| 汉源县| 阿克| 崇义县| 班玛县| 曲阳县| 丰城市| 安陆市| 和田市| 洛南县| 湄潭县| 仁化县| 太康县| 桃源县| 满洲里市| 祁门县| 齐齐哈尔市| 睢宁县| 佳木斯市| 报价| 兴仁县| 康保县| 通山县| 卢龙县| 安仁县| 咸阳市| 兴文县| 北票市| 临桂县| 元朗区| 孟连| 喀什市| 福贡县| 麟游县|