Struts2中使用國際化

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;
	}
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章