專注于java技術

           

          struts用資源文件國際化

          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的初始化.否則問題嚴重大了..這是一個慘痛的教訓.
            ArrayList  keys = new ArrayList();
            //根據提供的bundleName創建一個ResourceBundle
            System.out.println(bundleName);
            ResourceBundle bundle = ResourceBundle.getBundle("com.bookshop.struts." + bundleName);
            //將bundle中的keys通過方法getKeys()給取出來,放到一個枚舉類型的表里.
            ResourceBundleEnumeration keyList = (ResourceBundleEnumeration)bundle.getKeys();//獲取bundle中所有的鍵值.
            //創建一個局部變量key,用于暫存bundle中的一個key.
            String key = null;
            /*
             * 遍歷鍵值表,找出鍵值對應value與selectName相同,或selectName是value子串的key.添加到keys里
             */
            
            while(keyList.hasMoreElements()){
             //逐個取出枚舉表中的key值.
             key = (String)keyList.nextElement() ;
             //用bundle的getString()方法得到key對應的value./
             /*
              * 因為在資源文件里,存儲方式是  key<-->value  即 鍵<-->值 對.
              */
          //   System.out.println(key);
             String value = bundle.getString(key);
           
             //判斷,如果根據key得出來的value 中包含給出的待選名字,或者正好等于給定的待選名字.那么,就把此key添加到keys表里,備返回.
             if( (value.contains(selectName)) || (value.equalsIgnoreCase(selectName)) ){
              System.out.println(key);
              keys.add(key);

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

           /*
            * 判斷該執行哪一個bundle來獲取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;
           }

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

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


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          主站蜘蛛池模板: 西安市| 宁夏| 昌黎县| 佛冈县| 万源市| 都匀市| 佛山市| 和龙市| 奈曼旗| 上林县| 通榆县| 方城县| 沅江市| 碌曲县| 古交市| 寻乌县| 陆河县| 台山市| 大荔县| 丽江市| 青河县| 竹北市| 通海县| 石首市| 白城市| 永昌县| 江达县| 建阳市| 陵水| 泸溪县| 葫芦岛市| 克东县| 双柏县| 张家界市| 额济纳旗| 双桥区| 延安市| 东光县| 邵阳市| 大姚县| 民丰县|