Java struts2國際化,與js資源獲取
一、struts2國際化比較簡單,過程如下:
1. 建立資原始檔
中文資源:language_zh_CN.properties (language-自定義名稱,zh-中文,CN-中國)
英文資源:language_en_US.properties (language保持一致,en-英文,US-美國)
其內容就是鍵值對,倆資原始檔的鍵名對應保持一致,值分別對應中文與英文
其中中文在MyEclipse環境下,用Properties進行編輯,直接輸入中文
如:password 密碼
那麼從Source看時,就可看到中文是用Unicode表示的
如:password=\u5BC6\u7801
2. 配置
struts.xml檔案中,配置i18n的源,值取資原始檔的自定義名稱部分(如果資原始檔不是在src下,記得加上包路徑):
<constant name="struts.custom.i18n.resources" value="language"></constant>
web.xml檔案中,配置Struts2:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. jsp中使用資源
加入標籤引用:<%@ taglib prefix="s" uri="/struts-tags" %>
s:text標籤用健名取資源值:<s:text name="password"/>
或者表單元素用:key="password"
4. 在action中使用資源
用ActionSupport類中的方法取資源值:getText("password");
二、js中要獲取以上的資源值,就比較麻煩了
單獨建立一套資源的話,就需要維護兩套資源,重複且維護麻煩
1. js中使用量較少時,可在jsp頁面中定義變數先取出資源值
用js程式碼如:var curPassword='<s:text name="password"/>';
或:var curLang = {
password : '<s:text name="password"/>',
user : '<s:text name="user"/>'
}
那單獨的js檔案中就可直接使用了
2. 另外想到的是從java資源中全部取出,在js中再建立一個語言的物件
struts國際化,是建立在java國際化之上,做了一次封裝
java國際化,用到的有兩個類:Locale、ResourceBundle
Locale是語言類,選定當前的語言與地域,如:Locale locale = new Locale("zh","CN");
ResourceBundle是資源類,載入的是資源
如:ResourceBundle bundle = new ResourceBundle.getBundle("language",locale);
有個方法可取鍵值:bundle.getString("password");
找到一個方法可取全部鍵名:Set<String> keys=bundle.keySet();
好,再看Struts2中如何取ResourceBundle物件:
ActionSupport類中方法:ResourceBundle bundle=getTexts("langauge");
Action中新增方法:
protected String getCurLang(String resourceName){
ResourceBundle bundle=getTexts(resourceName);
if(null != bundle){
Set<String> keys=bundle.keySet();
Iterator<String> it = keys.iterator();
StringBuffer curLang = new StringBuffer();
curLang.append("{");
int id=0;
String key;
while(it.hasNext()){
key=it.next();
if(id>0){
curLang.append(",");
}
curLang.append(key);
curLang.append(":\'");
curLang.append(getText(key));
curLang.append("\'");
id++;
}
curLang.append("}");
return curLang.toString();
}
return "";
}
然後放入session中:session.setAttribute("curLang",getCurLang("langauge"));
或前臺呼叫Ajex通訊取得
最後,前臺把它轉為物件,如:
var strvar curLang="<%=session.getAttribute("curLang")%>";
那麼js檔案中就可直接使用了:curLang["password"];