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) 編輯 收藏