即internationalization
首字母i-結束字母n之間有18個字母
特征:在程序不做修改的情況下,可以根據不同的語言環境顯示相應內容
二、java內置國際化

message_en_US.PRoperties
demo = hello world!userName = user namepassWord = passwordwelcome = welcome!
message_zh_CN.properties
demo = /u60A8/u597D/u4E16/u754C!userName = /u7528/u6237/u540Dpassword = /u5BC6/u7801welcome = /u6B22/u8FCE!
message.properties
demo = /u60A8/u597D/u4E16/u754C!userName = /u7528/u6237/u540Dpassword = /u5BC6/u7801welcome = /u6B22/u8FCE!
實現代碼
<%@page import="java.util.ResourceBundle"%><%@page import="java.util.Locale"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>測試</title></head><body><h1>測試頁面</h1><%//獲取當前已經安裝的語言數組Locale [] locals=Locale.getAvailableLocales();//遍歷數組for(Locale local:locals){ //國家+國家代碼 out.print("國家: "+local.getDisplayCountry()+" 國家代碼:"+local.getCountry()+" "); //語言+語言代碼 out.println("語言: "+local.getDisplayLanguage()+" 語言代碼:"+local.getLanguage()+"<hr/>");}//引用語言 此處可以更改Locale ls=Locale.getDefault();//使用哪個資源文件ResourceBundle rb=ResourceBundle.getBundle("message",ls);//輸出out.println(rb.getString("demo"));out.println(rb.getString("userName"));out.println(rb.getString("password"));out.println(rb.getString("welcome"));%></body></html>三、Struts2實現準備全局資源文件:通常至少三個文件
命名規則:前綴名_語言_國家.properties
內容格式:key=value
指定資源文件(設置常量)
1.struts.xml文件中:
<constant name="struts.custom.i18n.resources" value="message" />
2.struts.properties中:
struts.custom.i18n.resources=message
<s:text name="demo"></s:text><s:text name="userName" /><s:text name="password" /><s:text name="welcome" />
更改資源文件
message.properites
demo = 您好世界!userName = 用戶名password = 密碼welcome = 歡迎!submit =提交reset=重置
message_zh_CN.properties
demo = 您好世界!userName = 用戶名password = 密碼welcome = 歡迎!submit =提交reset=重置
message_en_US.properties
demo = hello world!userName = user namepassword = passwordwelcome = welcome!submit =submitreset=reset
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>測試</title></head><body><s:text name="demo"></s:text><s:text name="userName" /><s:text name="password" /><s:text name="welcome" /><s:form action="" method="post"><s:textfield key="userName" /><s:password key="password"/><s:submit key="submit"/><s:reset key="reset" /></s:form></body></html>

message.properties
demo = 您好世界!userName = 用戶名password = 密碼welcome = {0}歡迎!{1}submit =提交reset=重置fail=登錄失敗usermsg=用戶名不能為空usermsglength=用戶名的長度為2-16位pwdmsg=密碼不能為空pwdmsglength=密碼的長度為2-16位message_zh_CN.properties同上
message_en_US.properties
demo = hello world!userName = user namepassword = passwordwelcome = {0}welcome!{1}submit =submitreset=resetfail=login failedusermsg=user name do not emptyusermsglength=user name length is 2 to 16!pwdmsg=password do not emptypwdmsglength=password length is 2 to 16!struts.xml
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.custom.i18n.resources" value="message" /> <package name="default" namespace="/" extends="struts-default"> <action name="login" class="action.LoginAction" method="login"> <result name="success"> /demo.jsp </result> <result name="input"> /demo.jsp </result> </action> </package></struts>
demo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>測試</title></head><body><%-- <s:text name="demo"></s:text><s:text name="userName" /><s:text name="password" /><s:text name="welcome" /> --%><s:form action="login.action" method="post"><s:textfield name="username" key="userName" /><s:password name="password" key="password"/><s:submit key="submit"/><s:reset key="reset" /></s:form><hr/><br/><s:actionmessage /><s:debug/></body></html>
LogionAction
package action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport { private String username; private String password; public String login() { if ("admin".equalsIgnoreCase(username) && "admin".equalsIgnoreCase(password)) { this.addActionMessage(this.getText("welcome", new String[] { username,password})); return SUCCESS; } this.addActionMessage(this.getText("fail")); return INPUT; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}LogionAction.login()驗證文件
LogionAction-login-validation.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators><field name="username"><field-validator type="requiredstring"><param name="trim">true</param><message>${getText("usermsg")}</message></field-validator><field-validator type="stringlength"><param name="trim">true</param><param name="minLength">2</param><param name="maxLength">16</param><message>${getText("usermsglength")}</message></field-validator></field><field name="password"><field-validator type="requiredstring"><param name="trim">true</param><message>${getText("pwdmsg")}</message></field-validator><field-validator type="stringlength"><param name="trim">true</param><param name="minLength">2</param><param name="maxLength">16</param><message>${getText("pwdmsglength")}</message></field-validator></field></validators>五、Jsp頁面國際化傳參數<!-- First Example --><s:i18n name="struts.action.test.i18n.Shop"> <s:text name="main.title"/></s:i18n><!-- Second Example --><s:text name="main.title" /><!-- Third Examlpe --><s:text name="i18n.label.greetings"> <s:param >Mr Smith</s:param></s:text>
<s:text name="welcome"><s:param>admin</s:param><s:param>ffff</s:param></s:text>


使用UI表單標志時,getText可以用來設置label屬性,例如: <s:textfield name="name" label="%{getText('UserName')}"/>八、資源文件里使用OGNL表達式許多情況下,我們都需要在動行時(runtime)為國際化字符插入一些參數,例如在輸入驗證提示信息的時候。在Struts 2.0中,我們可以通過在資源文件的國際化字符串中使用OGNL做到這點: 格式為${表達式},例如:
validation.require=${fileName} is required九、資源文件查找順序
新聞熱點
疑難解答