Struts2中使用国际化

 

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类父类对应的资源------》包级----》当前包对应资源-----》当前父包对应的资源-----》全局级-------》系统默认的语言包

Struts2中使用国际化

5.国际化消息传参

(1)使用ognl表达式;Struts通用

(2)占位符;{0},{1},最多使用10个;优势:不需要知道ognl中的属性名

(3)在配置文件中,调用getText()方法;

Struts2中使用国际化

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>

[html] view plain copy
  1. <s:form action="" method="post">  
  2.  <s:textfield name="name" label="%{getText('name1') }"></s:textfield><br>  
  3.  <s:textfield name="email" key="email"></s:textfield><br>  
  4.  <s:submit value="sumbit"></s:submit><br>  
  5.  </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>

实现代码:

[html] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@taglib prefix="s" uri="/struts-tags" %>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <base href="<%=basePath%>">  
  12.       
  13.     <title>My JSP 'success.jsp' starting page</title>  
  14.       
  15.     <meta http-equiv="pragma" content="no-cache">  
  16.     <meta http-equiv="cache-control" content="no-cache">  
  17.     <meta http-equiv="expires" content="0">      
  18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  19.     <meta http-equiv="description" content="This is my page">  
  20.     <!-- 
  21.     <link rel="stylesheet" type="text/css" href="styles.css"> 
  22.     -->  
  23.   
  24.   </head>  
  25.    
  26.   <body>  
  27.   <a href="testI18nAction?request_locale=zh_CN">中文</a><a href="testI18nAction?request_locale=en_US">English</a><br>  
  28.  <s:text name="name1"></s:text>  
  29.   <hr>  
  30.   <s:form action="" method="post">  
  31.   <s:textfield name="name" label="%{getText('name1') }"></s:textfield><br>  
  32.   <s:textfield name="email" key="email"></s:textfield><br>  
  33.   <s:submit value="sumbit"></s:submit><br>  
  34.   </s:form>  
  35.   <hr>  
  36.   <s:text name="name2"></s:text><br>  
  37.   <s:text name="name3">  
  38.   <s:param value="%{'lisi'}"></s:param>  
  39.   </s:text><br>  
  40.   <s:text name="email"></s:text><br>  
  41.   <s:text name="email1"></s:text>  
  42.   <hr>  
  43.     <s:text name="name"></s:text><br>  
  44.   <s:text name="name1"></s:text><br>  
  45.   <s:text name="email0"></s:text><br>  
  46.   <s:debug></s:debug>  
  47.   </body>  
  48. </html>  
Actin中代码:

[java] view plain copy
  1. package com.handler;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class TestI18nAction extends ActionSupport{  
  6.     private String name;  
  7.     public String getName() {  
  8.         return name;  
  9.     }  
  10.     public void setName(String name) {  
  11.         this.name = name;  
  12.     }  
  13.     public String testI18n(){  
  14.         this.name="wangwu";  
  15.         String email_error=getText("email1");  
  16.         String name2=getText("name2");  
  17.         String name3=getText("name3"new String[]{"zhangsan"});  
  18.         System.out.println(email_error);  
  19.         System.out.println(name2);  
  20.         System.out.println(name3);  
  21.           
  22.         return SUCCESS;  
  23.     }  
  24. }  
Struts2中使用国际化