java的struts1.x框架的國際化小結

所謂的國際就是說一個軟件界面可以根據不同的語言要求加載不同的資源文件,這些資源文件的內容就是用不同的語言來描述的。還有就是資源文件的命名也是有講究的,一般常用的命名方式是:baseName_language_country.properties;也即baseName可以根據需要隨便命名language和country分別指java中支持的語言和國家,如message_en_US.properties或message_zh_CN.properties這個文件應該放在類路徑中。說到這個,我就要從java中的幾個關於國際化類及方法說起。
這幾包括以下幾個:
java.util.ResourceBundle,java.util.Locale,java.text.MessageFormat
java.util.ResourceBundle這個類就是用來加載不同的語言資源文件的,它裏面有個靜態方法getBundle(“message”,new Locale(“zh”,”CN”);這個方法接收一個資源文件的baseName以及一個Local的類型對象,該對象指定了java中支持的語言類型,調用方式如MessageFormat.format(res, new Object[]{“kit”,”fds”});res是通過資源文件的鍵所得到的一個值,第二個參數是對象數組指定了資源文件中的參數。所有的調用步驟如下:

ResourceBundle rb = ResourceBundle.getBundle("message",new Locale("zh","CN"));
        String res = rb.getString("greet");         
        System.out.println(MessageFormat.format(res, new Object[]{"kit","fds"}));

同時資源文件中對應的內容爲:greet=hello{0}{0}代表第一個參數{1}代表第二個參數,依此類推…..
其實struts框架中的國際化,其底層也是通過使用這些工具類工具方法來實現的,只不過對這些東西做了進一步封裝。下面就其國際化內容的配置過程作一下簡單的小結。
首先我們要在struts-config.xml中引入<message-resources parameter="message"></message-resources>其中parameter的屬性值就是資源文件的baseName。資源文件的內容和上面提到的一樣,然後我們還要配置action控制器
<action path="/login" type="com.ev.myaction.MyAction">
<forward name="forward" path="/index.jsp"></forward>
</action>

這個控制器可以跳轉到index.jsp頁面,它的訪問路徑爲/login.do,處理類爲com.ev.myaction.MyAction。我們還要在index.jsp中調用一下這個action,具體爲:

<a href="/testi18n/login.do?l=zh&c=CN">中文</a>||<a href="/testi18n/login.do?l=en&c=US">英文</a>

這邊傳遞兩個參數l和c分別代表java支持的語言和國家。然後在action控制器中我們就可以通過這兩個參數來創建不同的Locale對象,從而加載不同的資源了具體內容如下:

package com.ev.myaction;

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class MyAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {        
        String l = request.getParameter("l");
        String c = request.getParameter("c");
        HttpSession session = request.getSession();
        session.setAttribute(Globals.LOCALE_KEY,new Locale(l,c));
        return mapping.findForward("forward");
    }

}

需要注意的是在action中創建一個Locale後我們要通過Globals.LOCALE_KEY屬性把它共享到作用域中去,然後在struts的底層才能夠去別識該Locale,從而加載不同的語言資源文件。mapping.findForward("forward")就跳轉到相應的頁面,在這裏以index.jsp爲例。跳轉到頁面後,我們要在頁面中通過<bean:message key="greet"/>標籤接收傳遞過來的信息;key和資源文件中的相關key相關聯。以上就是這些內容的簡單小結。

發佈了45 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章