struts2 國際化(本地化)

渴睡人的眼發表於2018-07-09

        在實際開發中,我們的程式服務的是全球的物件。因此,我們要使程式在不做任何修改的情況下可以在不同的國家和地區和不同預壓環境下,按照當地的語言和格式習慣顯示字元。例如:對於中國大陸的使用者,自動顯示簡體中的提示、錯誤資訊等;而對於美國的使用者,自動顯示英文的提示資訊、錯誤資訊等。這就引出了struts2框架的"國際化"。

操作步驟:

  1. 建立資原始檔
  2. 載入配置資原始檔
  3. 在jsp頁面使用資原始檔。i 引用struts標籤  ii獲取資原始檔內容

一、建立資原始檔:

    一個資源包由多個檔案組成,這些檔名都必須按規範命名:主檔名_語言程式碼_國家程式碼.properties。語言程式碼和國家程式碼按ISO規定。如下配置兩個資原始檔(注意主檔名必須):

    美式英語資原始檔:wgh_en_US.properties。

loginTitle=login
loginName=username
loginPassword=password

    中文資原始檔:wgh_zh_CN.properties。

loginTitle=\u767B\u5F55
loginName=\u7528\u6237\u540D
loginPassword=\u5BC6\u7801

    需要注意的是,在字尾名為properties的檔案中,因為編碼格式不同,裡面的漢字均以其他編碼格式顯示。   

將資原始檔均放置到src目錄底下,與struts.xml同級。

二、載入配置。

在struts.xml如下配置,標紅部分為配置資源資原始檔的標籤。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
          "http://struts.apache.org/dtds/struts-2.5.dtd">
          
<struts>
	<!-- 修改default.properties常量 -->
	
	<!-- 配置action的字尾名,如果有多個以逗號隔開 -->
    <constant name="struts.action.extension" value="action,,do,html"></constant>
	<!-- 配置是否為開發模式,報錯更詳細。如果專案上線,需關閉,設定value為false -->
	<constant name="struts.devMode" value="true"></constant>
	<!-- 配置xml是否重新載入。開發時設定為true,上線後設定為false -->
	<constant name="struts.configuration.xml.reload" value="true"></constant>
	<!-- 配置瀏覽器是否快取,開發時設定為false。上線後需設定為true -->
	<constant name="struts.serve.static.browserCache" value="false"></constant>
	<!-- 配置國際化語言設定 name為固定格式 value 填寫自己建立的properties中配置檔案的主檔名-->
	<constant name="struts.custom.i18n.resources" value="wgh"/>
	
	<package name="root" extends="struts-default">
		<action name="login">
			<result name="success">/international.jsp</result>
		</action>
	</package>

</struts>
1三、頁面使用國際化顯示
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Internation</title>
</head>
<body>
	<h1>
		<s:text name="loginTitle"></s:text>
	</h1>
	
	<div>
		<s:text name="loginName"></s:text>: <input type="text" placeholder="<s:text name='loginName'></s:text>">
		<br>
		<s:text name="loginPassword"></s:text>: <input type="password" placeholder="<s:text name='loginPassword'></s:text>">
		<br>
		<button>
			<s:text name="loginTitle"></s:text>
		</button>
	</div>
	<!-- 當我們訪問name為login 的action時,肯定會經過i18n的攔截器,在此攔截器
		中會獲取到我們提交的request_locale引數,根據引數的值我們當前介面會從
		對應的properties檔案中按照鍵獲取值,例如引數為zh_CNname就從xalo_zh_CN中按照鍵取值
	 -->
 		<a href="login.action?request_locale=zh_CN"><s:text name="chinese"></s:text></a>  
		<a href="login.action?request_locale=en_US"><s:text name="english"></s:text></a> 
	
</body>
</html>
至此啟動伺服器就可以嘗試了。

相關文章