1. 程式人生 > >Struts2國際化例項

Struts2國際化例項

  • 簡介

這次練習的內容是Struts2專案的國際化。什麼是國際化,顯然從字面就可以看出來,是為了讓做出來的專案可以在世界上任何國家的人都能瀏覽並理解上面的內容。簡單來說就是語言問題,把網頁中所有中文用其它語言來替代,這就是國際化。替換的方式不是重新寫一個介面,而是使用Struts2的國際化功能快速方便地進行替換。

  • 開發環境和工具

已配置最新版Java開發環境Windows作業系統。MyEclipse 2014/2016,Tomcat 7.0/8.0/9.0。

  • 具體操作步驟、程式碼與分析

在開始國際化之前,首先我們需要會基本的struts2表單標籤的使用,不然也沒東西讓你國際化對吧。學會了那些基礎的東西才能談國際化的問題,如果那些不會的話建議移步我的另一篇部落格

http://blog.csdn.net/qq_33171970/article/details/51380991

這次的專案也是表單,內容和上次的差不多,因為這次重點不是表單嘛~準備好這些東西之後,就開始準備學習國際化吧~

1.下載安裝ResourceBundle Editor外掛

首先,我們需要安裝一個外掛。這個外掛的作用是建立key值和對應的語言的值的對映關係,如果沒有這個外掛那麼國際化也無從談起。為什麼需要建立對映,建立幹什麼,怎麼用,看到後面就知道了,我們先把它裝起來再說。

為了找這個外掛,我在網上扒拉了好久,最後總算找到了這個外掛,為避免大家再浪費時間在這個上面,我把我找到的這個傳到網盤上分享給大家吧,大家直接下載就行:

連結: http://pan.baidu.com/s/1bY7FNw 密碼: xywy

把這個壓縮包解壓之後會看到一個plugins資料夾,把這個資料夾複製到MyEclipse安裝目錄的dropins資料夾下面,如圖:(如果安裝目錄自己沒有選擇的話一般在C:\Program Files\或者C:\Program Files (x86)\下,自己找找。)


複製好之後開啟MyEclipse,開啟Windows->Preference,如果出現下圖中圈起來的那幾行,就說明外掛已經安裝好了。


沒錯,資原始檔編輯器就是ResourceBundle Editor的中文,不要懷疑~繼續下一步啦~

2.配置web.xml、struts.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xmlns="http://xmlns.jcp.org/xml/ns/javaee" 	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 	http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<filter>
		<filter-name>struts 2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts 2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
	

這個就是struts2的,完全沒變。

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.i18n.encoding" value="gb2312"></constant>      //國際化加了這一句,大概意思就是讓它處理國際化這個事件。(我猜的)
<package name="default"  extends="struts-default" >                   //這些東西還是之前的,用來處理表單的action請求
<action name="save" class="org.action.StrutsAction" >
	<result name="error">/error.jsp</result>
	<result name="input">/index.jsp</result>
	<result name="success">/success.jsp</result>
</action>
</package>
</struts>


3.瞭解國際化的三種方式,修改jsp頁面

在以上的東西都配置好之後,就開始準備到表單提交的jsp修改程式碼以國際化吧~

首先,如果我們對一個內容進行國際化,我們有三種方式:

第一種:<s:text name="xxx"/>方式

這個標籤是常用於國際化的標籤,它會根據name的值去資原始檔中匹配,如果匹配到那麼就會顯示資原始檔裡面的值。如果無法匹配到,那麼就會顯示name的值。資原始檔是什麼怎麼配在後面會說。

這種方式適合於一般文字的國際化。

第二種:<s:textfield name="xxx" key="xxx"/>方式

這種方式是適用於表單標籤的,比如說之前我們的顯示錶單項前面的內容用的是lable="xx",但是那樣是沒辦法國際化的,表單元素前面內容的提示資訊國際化就是加一個key="xx",請注意這種方式與第一種方式的區別,第一種方式的值是name,用name的值去匹配以顯示對應的內容。而這種方式去匹配的關鍵字不是name,而是key,表單元素裡面的name是傳值用的,請注意區分。

簡言之,就是第二種方式的key相當於第一種方式的name。

第三種:getText()方法

這個方法相當於萬能藥,以上的兩種方式都可以被替換。它是ActionSupport類中的一個方法。

<s:text name="xxx"/>

<s:textfield name="xxx" key="xxx"/>

 使用getText()方法可以實現為:

<s:property value="%{getText('xxx')}"/>

<s:textfield label="%{getText{'xxx'}}"/>

注意格式別搞錯了,相當於第一種方式的name第二種方式的key的就是getText('xxx')單引號裡面的內容。

其它的注意點參考程式碼吧~

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%@taglib prefix="sx" uri="/struts-dojo-tags"%>
<html>
  <head>
    <title>Struts2國際化</title>
    <sx:head/>
	<s:head/>
  </head>
  
  <body>
    	<div style="margin-top:140px;margin-left:38%;font-family:Microsoft YaHei;text-align:center">
    	<s:i18n name="indexResource">                                    //這裡值得是資原始檔的名字,要與下面所建立的資原始檔名字一樣
    		<s:form action="save.action" method="post" >
    			<table>
    				<tr>
    					 <s:textfield name="number" key="number"></s:textfield> //第二種方式
    				</tr>
    				<tr>
    					<s:textfield  name="name" key="name"></s:textfield>
    				</tr>
    				<tr>
    					<s:radio list="#{1:'男',0:'女'}" name="sex" key="sex" value="1"> </s:radio> 
    				</tr>
    				<tr>
    					<sx:datetimepicker name="birthday" key="birthday" ></sx:datetimepicker>
    				</tr>
    				<tr>
    					 <s:textfield  key="profe" name="profe"></s:textfield> 
    				</tr> 
    				<tr>
    					<s:textarea   name="note" key="note"></s:textarea>
    				</tr>
    			<tr>
    				<td><s:submit value="%{getText('submit')}"></s:submit>  //第三種方式
   					<s:reset value="%{getText('reset')}"></s:reset></td>
   				</tr>
   				<tr>
   					這是一個測試:<s:text name="test"/>  //第一種方式
   				</tr>	
   				</table>
    		</s:form>
    	  </s:i18n>
    	</div>
  </body>
</html>


4.建立對應的資原始檔

資原始檔就是存放上述name、value對應的值的檔案,也就是完成國際化的原理所在。看一看就明白了。

首先在src下面新建一個檔案struts.properties,這個檔案是用來管理國際化資原始檔的,我們只用了一個indexResource,所以新增一行內容:

struts.custom.il8n.resources=indexResource
注意別搞錯了啊。

然後再在src資料夾下面新建對應語言的資原始檔,這個檔案注意命名格式,因為它是按照檔名去匹配資原始檔的,如果名字錯了就找不到了。命名格式見下面:

中文:indexResource_zh_CN.properties

英文(美國):indexResource_en_US.properties

前面的indexResource這個值需要與上面struts.properties裡面和jsp裡面的值對應。

這兩個檔案新建好以後,選一個右鍵,Open With有一個資原始檔編輯器,沒錯,就是我們之前裝的那個外掛,用這個開啟之後介面如下:



是這樣嗎?

廢話當然不是,我這個是已經配好的,你新建的當時是空白,不過看到這裡你應該就懂了,只需要把jsp裡面的name(第一種方式),key(第二種方式),。。。還有第三種方式的值作為左邊的value,右邊設定對應的內容,就可以自動替換了,簡單吧~

5.部署執行專案,檢視結果

在伺服器上部署執行該專案,會發現還是中文的,沒啥反應,這怎麼知道自己是成功了還是沒成功呢?

這裡的國際化是根據使用者的語言環境來匹配的,也就是會識別系統的語言,我們把系統的語言給改掉就可以看到結果了。

更改系統語言的方法(win10)控制面板/時鐘、語言/語言,如果沒有安裝英文還要安裝一下英文。安裝之後把它設為首選項,然後還要重啟系統生效。。。再次開啟就會發現它已經變成英文了。

如果重啟之後,你又回來的話,你就會懵逼地發現,臥槽什麼鬼怎麼系統都變成英文了。沒錯,這個時候你再開啟工程,部署執行。下面放圖。


安裝並且重啟電腦之後是這樣:


那麼專案的樣子分別是:


好了,到這裡練習完成~~~

對了,關於為什麼i18n就是國際化的意思,因為國際化單詞是internationalization,首字母i,尾字母n,中間還有18個字母。。。。。懂了吧。。。。真相是因為這個單詞太特麼長了大家打者都心累+手累,所以就變成大家預設的i18n了。。。

程式碼照舊上傳到網盤~

連結: http://pan.baidu.com/s/1c7J9l8 密碼: sqqi

此外,老是被別的地方轉的搞得自己部落格的訪問量都受到了很大影響。所以附上本文的原文連結,你轉載不給我加我就自己加,哼,你來打我啊。

/*

*本文連結:http://blog.csdn.net/qq_33171970/article/details/51401480

*作者:桐小目

*/