struts2国际化

国际化资源文件分为三种级别
(1) 全局资源文件,可以被整个应该程序引用,也就是struts.custom.i18n.resources=messageResource指定的文件
(2) 包级资源文件,每个包的根目录下可以新建资源文件,仅被当前包中的类访问.文件名格式为:package_语言代码_国家代码.
(3) Action级资源文件,仅被当前Action引用,名称为action名_语言代码_国家代码
查找顺序为从小范围到大范围, Action级优先级最大 

 

一、在struts.xml配置全局资源文件

 

<constant name="struts.custom.i18n.resources" value="i18n/messages" />

 

 

二、在项目根目录下放入全局国际化资源文件,注意以上面定义的messages命名

struts2国际化


 三、在各自的模块包里放入包资源文件,默认以
package开头

struts2国际化
 四、定义标签访问国际化

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">

	<description><![CDATA[Application TagLib]]></description>
	<display-name>Application Tags</display-name>
	<tlib-version>2.0</tlib-version>
	<short-name>app</short-name>
	<uri>/app-tags</uri>
 <function>
		<description><![CDATA[get global resource message]]></description>
		<name>i18n</name>
		<function-class>com.sf.framework.taglib.i18n.I18nEl</function-class>
		<function-signature>java.lang.String i18n(java.lang.String)</function-signature>
	</function>
</taglib>

 四、封装类I18nEl 

package com.sf.framework.taglib.i18n;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
import com.sf.module.common.context.UserContext;

public class I18nEl {
	    
	public static  String i18n(String key) {
		try {
			ActionContext context = ActionContext.getContext();
			context.setLocale(UserContext.getContext().getLocale());
			ValueStack valueStack=context.getValueStack();
			return (String)valueStack.findValue("getText(\""+key+"\")", String.class, false);
		} catch (Exception e) {			
		}
		return "";		
	}	
}

 五、在页面中使用标签获取国际化,其中key是在配置文件中定义的

${app:i18n('roleType.roleTypeDesc') }

 

 

你可能感兴趣的:(struts2)