UI標(biāo)簽
信息和錯(cuò)誤。
Action類。
Struts2使用資源束為Web應(yīng)用程序的用戶提供多種語(yǔ)言和區(qū)域的設(shè)置選項(xiàng)。你不必?fù)?dān)心需要用不同的語(yǔ)言編寫頁(yè)面,你需要做的只是為每種你想要的語(yǔ)言創(chuàng)建一個(gè)資源束。資源束將包含用戶語(yǔ)言中的標(biāo)題,消息和其他文本,是包含應(yīng)用程序默認(rèn)語(yǔ)言的一對(duì)key/value的文件。
bundlename_language_country.properties這里的bundlename可以是ActionClass,Interface,SuperClass,Model,Package,Global資源屬性。下一部分language_country表示國(guó)家區(qū)域設(shè)置,例如西班牙語(yǔ)(西班牙)區(qū)域設(shè)置由es_ES表示,英語(yǔ)(美國(guó))區(qū)域設(shè)置由en_US表示等。這里先跳過(guò)可選國(guó)家的部分。
ActionClass.properties
Interface.properties
SuperClass.properties
model.properties
package.properties
struts.properties
global.properties
要以多種語(yǔ)言開(kāi)發(fā)應(yīng)用程序,你必須維護(hù)與這些語(yǔ)言/區(qū)域設(shè)置對(duì)應(yīng)的多個(gè)屬性文件,并根據(jù)每對(duì)key/value定義所有內(nèi)容。例如,如果你要開(kāi)發(fā)美國(guó)英語(yǔ)(默認(rèn)),西班牙語(yǔ)和法語(yǔ)的應(yīng)用程序,必須創(chuàng)建三個(gè)屬性文件。這里我們將使用global.properties文件,你也可以使用不同的屬性文件來(lái)分離不同類型的信息。
global.properties:默認(rèn)情況下使用英語(yǔ)(美國(guó))
global_fr.properties:這將用于法語(yǔ)環(huán)境。
global_es.properties:這將用于西班牙語(yǔ)環(huán)境。
有幾種方法來(lái)訪問(wèn)信息資源,包括getText,text標(biāo)簽,UI標(biāo)簽的key屬性和i18n標(biāo)簽。接下來(lái)讓我們簡(jiǎn)要了解一下:
顯示i18n文本,需在property標(biāo)簽或其他任何標(biāo)簽(如UI標(biāo)簽)中調(diào)用getText,如下所示:
<s:property value="getText('some.key')" />
text標(biāo)簽從默認(rèn)資源束(即struts.properties)中檢索信息:
<s:text name="some.key" />
i18n標(biāo)簽會(huì)將任意資源束推送到值棧,而i18n標(biāo)簽內(nèi)的其他標(biāo)簽可以顯示來(lái)自該資源束的信息:
<s:i18n name="some.package.bundle"> <s:text name="some.key" /> </s:i18n>
大多數(shù)UI標(biāo)簽的key屬性可用于從資源束檢索信息:
<s:textfield key="some.key" name="textfieldName"/>
現(xiàn)在,讓我們用多種語(yǔ)言創(chuàng)建前一章中的index.jsp文件,如下所示:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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> <title>Employee Form with Multilingual Support</title> </head> <body> <h1><s:text name="global.heading"/></h1> <s:url id="indexEN" namespace="/" action="locale" > <s:param name="request_locale" >en</s:param> </s:url> <s:url id="indexES" namespace="/" action="locale" > <s:param name="request_locale" >es</s:param> </s:url> <s:url id="indexFR" namespace="/" action="locale" > <s:param name="request_locale" >fr</s:param> </s:url> <s:a href="%{indexEN}" >English</s:a> <s:a href="%{indexES}" >Spanish</s:a> <s:a href="%{indexFR}" >France</s:a> <s:form action="empinfo" method="post" namespace="/"> <s:textfield name="name" key="global.name" size="20" /> <s:textfield name="age" key="global.age" size="20" /> <s:submit name="submit" key="global.submit" /> </s:form> </body> </html>
現(xiàn)在創(chuàng)建success.jsp文件,這個(gè)文件在action返回SUCCESS結(jié)果的情況下會(huì)被調(diào)用。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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> <title>Success</title> </head> <body> <s:property value="getText('global.success')" /> </body> </html>
這里我們需要?jiǎng)?chuàng)建以下兩個(gè)action。(a)第一個(gè)action處理區(qū)域設(shè)置并顯示使用不同語(yǔ)言的同一個(gè)index.jsp文件;(b)另一個(gè)action是負(fù)責(zé)提交表單本身。這兩個(gè)action都將返回SUCCESS,但我們將根據(jù)返回值采取不同的action,因?yàn)檫@兩個(gè)action的目的是不同的:
package cn.w3cschool.struts2; import com.opensymphony.xwork2.ActionSupport; public class Locale extends ActionSupport{ public String execute() { return SUCCESS; } }
package cn.w3cschool.struts2; import com.opensymphony.xwork2.ActionSupport; public class Employee extends ActionSupport{ private String name; private int age; public String execute() { return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
現(xiàn)在,讓我們創(chuàng)建以下三個(gè)global.properties文件并放入CLASSPATH:
global.name = Name global.age = Age global.submit = Submit global.heading = Select Locale global.success = Successfully authenticated
global.name = Nom d'utilisateur global.age = l'age global.submit = Soumettre des global.heading = Sé lectionnez Local global.success = Authentifi é avec succès
global.name = Nombre de usuario global.age = Edad global.submit = Presentar global.heading = seleccionar la configuracion regional global.success = Autenticado correctamente
我們接著創(chuàng)建包含兩個(gè)action的struts.xml文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.custom.i18n.resources" value="global" /> <package name="helloworld" extends="struts-default" namespace="/"> <action name="empinfo" class="cn.w3cschool.struts2.Employee" method="execute"> <result name="input">/index.jsp</result> <result name="success">/success.jsp</result> </action> <action name="locale" class="cn.w3cschool.struts2.Locale" method="execute"> <result name="success">/index.jsp</result> </action> </package> </struts>
以下是web.xml文件的內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
現(xiàn)在,右鍵單擊項(xiàng)目名稱,然后單擊“Export”> “WAR File”以創(chuàng)建WAR文件。然后在Tomcat的webapps目錄中部署WAR文件。最后,啟動(dòng)Tomcat服務(wù)器并嘗試訪問(wèn)URL http://localhost:8080/HelloWorldStruts2/index.jsp,將顯示以下界面:
現(xiàn)在可選擇任意語(yǔ)言,如果選擇西班牙語(yǔ),會(huì)顯示以下結(jié)果:
你也可以嘗試用法語(yǔ)。最后,點(diǎn)擊Submit按鈕,當(dāng)在西班牙語(yǔ)環(huán)境時(shí),會(huì)顯示以下界面:
恭喜,你現(xiàn)在有了多語(yǔ)言的網(wǎng)頁(yè),可以在嘗試在全球推送你的網(wǎng)站。
更多建議: