struts2對語言包的支持可以分爲3類
1.action級(給某個action用);
2.包級(給包中的所有action用);
3.全局(給整個工程用);
4.優先級;
action級
1.命名:action名+國際化後綴(actionName_zh_CN);
2.位置:放在action類所在的包中;
包級
1.命名:package+國際化後綴(package_zh_CN);
2.位置:對那個包起作用就放在哪個包中;
全局級
1.命名:前綴自己命名+國際化後綴
2.位置:classpath根(src根);
3.需要在struts.xml中配置:<constant name="struts.custom.i18n.resources" value="i18n"></constant>//value值是自己命名的前綴;
4.優先級問題:
action級----》當前action對應資源-----》當前action類實現接口對應的資源-----》當前action類父類對應的資源------》包級----》當前包對應資源-----》當前父包對應的資源-----》全局級-------》系統默認的語言包
5.國際化消息傳參
(1)使用ognl表達式;Struts通用
(2)佔位符;{0},{1},最多使用10個;優勢:不需要知道ognl中的屬性名
(3)在配置文件中,調用getText()方法;
6.不同資源中訪問國際化消息
1.jsp:<s:text>
2.資源文件中:${getText("key")};
3.action類中:getText();
7.表單獲取國際化參數:
label和key屬性指定;
<s:textfield name="name" label="%{getText('name1') }"></s:textfield><br>
<s:textfield name="email" key="email"></s:textfield><br>
<s:form action="" method="post">
<s:textfield name="name" label="%{getText('name1') }"></s:textfield><br>
<s:textfield name="email" key="email"></s:textfield><br>
<s:submit value="sumbit"></s:submit><br>
</s:form>
8.如何切換國際化
原理:運行一個應用程序,首先會從請求request中找一個名字爲:request_locale的一個參數,如果有,應用該locale的值,並且將該值存放在session中一個名字爲WW_TRANS_I18N_LOCALE的鍵中;若果沒有:會到session中讀取名字爲WW_TRANS_I18N_LOCALE的值,如果session中有,就應用該值,如果session中沒有讀取actionContext中locale的值。
<a href="testI18nAction?request_locale=zh_CN">中文</a><a href="testI18nAction?request_locale=en_US">English</a>
實現代碼:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'success.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<a href="testI18nAction?request_locale=zh_CN">中文</a><a href="testI18nAction?request_locale=en_US">English</a><br>
<s:text name="name1"></s:text>
<hr>
<s:form action="" method="post">
<s:textfield name="name" label="%{getText('name1') }"></s:textfield><br>
<s:textfield name="email" key="email"></s:textfield><br>
<s:submit value="sumbit"></s:submit><br>
</s:form>
<hr>
<s:text name="name2"></s:text><br>
<s:text name="name3">
<s:param value="%{'lisi'}"></s:param>
</s:text><br>
<s:text name="email"></s:text><br>
<s:text name="email1"></s:text>
<hr>
<s:text name="name"></s:text><br>
<s:text name="name1"></s:text><br>
<s:text name="email0"></s:text><br>
<s:debug></s:debug>
</body>
</html>
Actin中代碼:
package com.handler;
import com.opensymphony.xwork2.ActionSupport;
public class TestI18nAction extends ActionSupport{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String testI18n(){
this.name="wangwu";
String email_error=getText("email1");
String name2=getText("name2");
String name3=getText("name3", new String[]{"zhangsan"});
System.out.println(email_error);
System.out.println(name2);
System.out.println(name3);
return SUCCESS;
}
}