1. 程式人生 > >Struts2 國際化詳解

Struts2 國際化詳解

*.JSP中使用國際化資源

建立XXX_zh_CN.properties 配置檔案 XXX可以任意(放在src目錄下)

#user=使用者名稱
#password=密碼
user=\u7528\u6237
password=\u5BC6\u7801

對應*.jsp檔案

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<s:i18n name="struts.configuration.in_zh_CN" >
<html>
	<head>
		<title> Internationnal </title>
	</head>
	
	<body>
                <!-- text 標籤在s:i18n標下面時候 將直接通過name屬性獲取訊息 -->
		<s:text name="user" />
		<s:form>
			<!-- 表單標籤在s:i18n標下面時候  表單標籤key屬性將會從國際化資原始檔中載入 訊息 -->
			<s:textfield name="users" key="user" /> 
			<s:textfield name="users" key="password" /> 
		</s:form>
		
	</body>
</html>
</s:i18n>

Action範圍內使用國際化資源

Action類需要繼承ActionSupport類

public class International extends ActionSupport{
	
	public String execute(){
		//通過ActionSupport getText()方法的支援 獲取國際化資原始檔中資訊
		System.out.println("user:" + getText("user")); 
		return Action.SUCCESS;
	}
}

國際化資原始檔 International_zh_CN.properties 注意 開頭部分必須與action類名相同 且該檔案放在 Action 同一個包下面

user=\u7528\u6237\u540Dwang
password=\u5BC6\u7801

*.jsp檔案

                <s:text name="user" />
		<s:form>
			<!-- 表單標籤在s:i18n標下面時候  表單標籤 key屬性將會從國際化資原始檔中載入 訊息 -->
			<s:textfield name="users" key="user" /> 
			<s:textfield name="users" key="password" /> 
		</s:form>

與前面用法相同 只是 不需要使用<s:i18n>標籤了

包範圍內國際化資源 應放在對應action包下 且該包下的所有action或者子包下Action都可以使用該國際化資原始檔  其中命名格式為 package_zh_CN.properties  package 是固定的。(當特定action類的國際化資源與包範圍內國際化資源同時存在的時候將優先使用特定的)

設定全域性國際化資原始檔(建議存放一些型別轉換錯誤 ,上傳檔案錯誤等一些通用資訊)

1,可以在struts.xml檔案中進行配置(<constant name="struts.custom.i18n.resources" value="in" />  其中in 檔案 src/in_zh_CN.properties)

2,也可以在struts.properties 檔案中加如下語句

struts.custon.i18n.resources=in

國際化檔案佔位符的指定

資原始檔:

hello={0} 你好 {1}

*.jsp 中使用該資源:

                <s:text name="hello">
			<s:param>大家</s:param>
			<s:param>world</s:param>
		</s:text>

Action類中使用:(getText()方法中第一個引數為資原始檔中的key  第二個引數為一個String陣列 各個元素為 各個佔位符填充)

public String execute(){
		System.out.println("hello:" + getText("hello",new String[]{"wang" , "世界"}));
		return Action.SUCCESS;
	}

國際化資原始檔也可以配置成如下形式

#配置成如下形式將不需要手動去填充佔位符 該佔位符將 通過表示式自動從 ValueStack中找
USER=歡迎: ${username} 使用者