使用 Struts 2 實現國際化


struts2國際化(I18N)

  國際化也叫I18N,是Internationalization的簡稱。Struts2國際化是建立在Java國際化基礎上,只是Struts2框架對Java國際化進行了進一步封裝,從而簡化了應用程序的國際化。

使用struts2 實現國際化

在上一次的”使用 Struts2 校驗器校驗用戶注冊信息“項目為基礎上實現國際化:http://www.cnblogs.com/likailan/p/3302284.html

 

一、在strute.xml中指定資源文件的基名。

在strute.xml文件的struts標簽里加入如下代碼:

    <constant name="struts.custom.i18n.resources" value="message"/>
    <constant name="struts.i18n.encoding" value="UTF-8" />

通過“struts.custom.i18n.resources”屬性指定國際化資源文件的基名為“message”,位於src目錄下。如果屬性值為“cn.jbit.message”,則資源文件的基名仍是“message”,但位於“cn.jbit”包中。還可以通過“struts.i18n.encoding”屬性指定默認的編碼方案。如果要進行國際化,必須指定為“UTF-8”。

二、創建資源文件,用來存放相應的資源

資源文件為properties文件,命名規則為:基名 _語言代號_地區代號.properties。基名就是第一步里設置的“message”。語言代號和地區代號可以在IE里查看:打開IE->打開internet選項->點擊語言->點擊添加,可以看到如下“添加語言”對話框,里面就有顯示各種語言和地區的代號:

在src目錄下添加分別為 中文-中國 和 英文-美國 的資源文件。那么對應的文件名就是:

中文-中國:message_zh_CN.properties

英文-美國:message_en_US.properties

message_zh_CN.properties代碼:

title=注冊
form.email=郵箱:
form.password=密碼:
form.repassword=重復密碼:
form.phone=電話:
form.submit=提交

message_en_US.properties代碼:

title=register
form.email=eMail:
form.password=password:
form.repassword=repassword:
form.phone=phone:
form.submit=submit

三、實現JSP頁面信息的國際化顯示

把和顯示相關的文字都替換成  <s:text name="對應資源文件的鍵"/> 其中屬性 name 的值為資源文件里相對應的key。如:<s:text name="title"/>      <s:text name="form.email"/>

頁面代碼:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!-- 加載struts2標簽庫 -->
 4 <%@ taglib uri="/struts-tags" prefix="s"%>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <s:head/>
 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10 <!-- 把和顯示相關的文字都替換成  <s:text name="對應資源文件的鍵"/> -->
11 <title><s:text name="title" /></title>
12 </head>
13 <body>
14     <form action="register.action" method="post">
15         <table> 
16             <tr>
17                 <!-- 把和顯示相關的文字都替換成  <s:text name="對應資源文件的鍵"/> -->
18                 <td><s:text name="form.email" /></td>
19                 <td><input type="text" name="email"/></td>
20                 <!-- 使用<s:fielderror/>標簽輸入相應的字段錯誤信息 -->
21                 <td><s:fielderror fieldName="email"/></td>
22             </tr>
23             <tr>
24                 <!-- 把和顯示相關的文字都替換成  <s:text name="對應資源文件的鍵"/> -->
25                 <td><s:text name="form.password" /></td>
26                 <td><input type="password" name="password"/></td>
27                 <td><s:fielderror fieldName="password"/></td>
28             </tr>
29             <tr>
30                 <td><s:text name="form.repassword" /></td><td>
31                 <input type="password" name="repassword"/></td>
32                 <td><s:fielderror fieldName="repassword"/></td>
33             </tr>
34             <tr>
35                 <td><s:text name="form.phone" /></td>
36                 <td><input type="text" name="phone"/></td>
37                 <td><s:fielderror fieldName="phone"/></td>
38             </tr>
39             <tr>
40                 <td><input type="submit" value="<s:text name="form.submit" />"/></td>
41                 <td></td>
42                 <td></td>
43             </tr>
44         </table>
45     </form>
46 </body>
47 </html>

四、測試

啟動tomcat。用IE打開register.jsp頁面。

打開internet選項->點擊語言->點擊添加,可以看到如下“添加語言”對話框。添加“英語(美國)[en-US]”項,並把該項上移到最上層

刷新頁面:

 

 實現驗證錯誤信息的國際化顯示

表單的驗證錯誤信息也需要進行國際化顯示,Struts 2 針對編碼驗證和驗證框架都提供了國際化實現,此時驗證錯誤信息以鍵值對的方式書寫在資源文件中,而無需直接書寫在validate方法或者驗證配置文件中。

一、添加相應的國際化內容到資源文件中

message_zh_CN.properties添加如下國際化內容:

######### 校驗錯誤信息 ###########
form.email.null=郵箱不能為空
form.email.format=郵箱格式不正確
form.password.null=密碼不能為空
form.password.length=密碼長度不能少於6位
form.repassword.same=兩次密碼不一至
form.phone.format=電話號碼格式不正確

message_en_US.properties添加如下國際化內容:

######### 校驗錯誤信息 ###########
form.email.null=eMail cannot be null
form.email.format=eMail format is error
form.password.null=password cannot be null
form.password.length=minimum password length is 6
form.repassword.same=repassword should be same with password
form.phone.format=phone format is error

二、修改驗證框架的配置文件

修改驗證框架的配置文件,去掉具體的驗證錯誤信息,通過 <message> 標簽的key屬性指定其對應的驗證錯誤信息。

修改后的 RegisterAction-register-validation.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE validators PUBLIC
 3         "-//Apache Struts//XWork Validator 1.0.2//EN"
 4         "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
 5 
 6 <validators>
 7     <!-- name值為需要被校驗的字段,這里對email字段進行校驗 -->
 8     <field name="email">
 9         <!-- type值為校驗器名,requiredstring:非空字符串校驗器 -->
10         <field-validator type="requiredstring">
11             <!-- 去掉具體的驗證錯誤信息,通過 <message> 標簽的key屬性指定其對應的驗證錯誤信息。 -->
12             <message key="form.email.null" />
13         </field-validator>
14         <!-- 一個字段可以配置多個校驗器,email:校驗郵箱格式 -->
15         <field-validator type="email">
16             <!-- 去掉具體的驗證錯誤信息,通過 <message> 標簽的key屬性指定其對應的驗證錯誤信息。 -->
17             <message key="form.email.format" />
18         </field-validator>
19     </field>
20 
21     <field name="password">
22         <field-validator type="requiredstring">
23             <message key="form.password.null" />
24         </field-validator>
25         <!-- stringlength:字符串長度校驗 -->
26         <field-validator type="stringlength">
27             <!-- 為校驗器指定參數實現不同的校驗規則,minlength:最少長度 -->
28             <param name="minLength">6</param>
29             <message key="form.password.length"/>
30         </field-validator>
31     </field>
32 
33     <!-- 校驗兩次密碼是否一致,使用 fieldexpression 校驗器。expression參數指定判斷用的表達式 -->
34     <field name="repassword">
35         <field-validator type="fieldexpression">
36             <!-- 表達式要寫在 <![CDATA[]]> 內 -->
37             <param name="expression"><![CDATA[repassword==password]]></param>
38             <message key="form.repassword.same"/>
39         </field-validator>
40     </field>
41 
42     <!-- 校驗電話格式,使用regex正則表達示校驗,regexExpression參數指定正則表達式 -->
43     <field name="phone">
44         <field-validator type="regex">
45             <!-- 注意!2.3.15前的版本使用 expression 參數 -->
46             <param name="regexExpression"><![CDATA[\d{11}]]></param>
47             <message key="form.phone.format" />
48         </field-validator>
49     </field>
50 
51 </validators>

四、測試

 

打開internet選項->點擊語言->點擊添加,可以看到如下“添加語言”對話框。添加“英語(美國)[en-US]”項,並把該項上移到最上層。刷新頁面:

 通過超鏈接轉換頁面 語言-地區

 一、在register.jsp頁面中添加如下超連接:

    <a href="changelan.action?request_locale=zh_CN">簡體中文</a>&nbsp;&nbsp;&nbsp;
    <a href="changelan.action?request_locale=en_US">English</a>

跳到一個名為changelan的action里,傳遞名為request_locale(固定寫化)的參數,值為要換轉的 語言代號_地區代號。

二、編寫相應的action類

ChangelanAction.java代碼:

 1 import java.util.Locale;
 2 
 3 import com.opensymphony.xwork2.ActionContext;
 4 import com.opensymphony.xwork2.ActionSupport;
 5 
 6 
 7 public class ChangelanAction extends ActionSupport{
 8 
 9     public String execute() throws Exception {
10         //獲得本地默認的語言環境
11         Locale locale=Locale.getDefault();
12         //存入到一個session變量中。"WW-TRANS-I18N-LOCALE"為固定寫法
13         ActionContext.getContext().getSession().put("WW-TRANS-I18N-LOCALE", locale);
14         return SUCCESS;
15     }
16     
17 }

三、配置struts.xml

在package標簽內添加如下action標簽:

<action name="changelan" class="ChangelanAction">
    <result name="success">register.jsp</result>
</action>

四、測試

頁面如下:

點擊簡體中文:

點擊English


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM