1. 程式人生 > >Java struts2國際化,與js資源獲取

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"];