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类父类对应的资源------》包级----》当前包对应资源-----》当前父包对应的资源-----》全局级-------》系统默认的语言包
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>
原理:运行一个应用程序,首先会从请求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>
- 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;
- }
- }