【新手學習記錄,僅供參考!】
1.項目准備
首先當然是我們得創建一個struts2的web項目,並且已經實現了一個簡單的功能。
以下通過登錄功能來舉例說明。
2.指定全局國際化資源文件
在struts.xml中配置i18n資源文件。
<constant name="struts.custom.i18n.resources" value="souvenir"/>
3.配置語言資源配置文件
這里以中英兩種語言作為例子。
需要分別配置souvenir_en_US.properties以及souvenir_en_US.properties
4.在jsp頁面中進行調用
<title><s:text name="loginPage"/></title> </head> <body> <s:form action="login"> <s:textfield name="username" key="user"/> <s:password name="password" key="pass"/> <s:submit name="submit" key="login"></s:submit> </s:form>
這時,系統已經實現了i18n,只是默認根據瀏覽器的語言配置來加載的資源文件。
我們可以事先修改一下IE的Internet選項中的語言配置,來驗證i18n功能是否成功實現。
比如我們將英文設置為默認語言,這時重新打開剛才jsp登錄頁面,就會發現提示語言變為英文。
5.添加語言選擇功能
在jsp頁面增加兩個語言選擇的鏈接:
<br/> <s:a href="chlang?lang=zh">簡體中文</s:a> <br/> <s:a href="chlang?lang=en">English</s:a>
這里實則上是調用的chlang這個action來進行語言選擇的處理,同時傳遞了語言參數。
6.配置和實現chlang這個action
首先在struts.xml中增加chlang的配置,方法與之前其他的action配置類似
這里由於是進行語言切換,所以默認都是跳轉到login頁面
<action name="chlang" class="org.souvenir.app.action.LoginAction" method="chlang">
<result>/login.jsp</result>
</action>
然后在LoginAction類中實現chlang方法
public String chlang(){ Locale locale = null; System.out.println("lang:"+lang); if (lang.equals("zh")) { // 顯示中文 locale = Locale.CHINA; System.out.println("======" + lang+locale); } else { // 顯示英文 locale = Locale.US; } ActionContext.getContext().setLocale(locale); ServletActionContext.getRequest().getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale); return SUCCESS; }
邏輯比較簡單,根據用戶選擇語言參數來判斷並修改需要加載語言資源。
7.效果預覽
默認打開login.jsp頁面時,由於我的瀏覽器已經修改語言為英語,所以默認加載英文。
然后我們選擇“簡體中文”進行語言切換,效果如下:
8.總結
簡單小結一下,其實原理還是比較簡單的。
首先是瀏覽器根據IE默認配置加載對應的語言資源
然后是用戶主動選擇語言切換后,系統通過action處理請求,然后返回相應的頁面,從而實現多語言的效果。