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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值