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條記錄的下一行行號記錄下來,下一頁查詢的時候,從記錄的行號繼續往下查詢。不過,我在文件這方面學的不精,是以沒寫出來。
請大家指正。