现在的位置: 首页 > 综合 > 正文

struts2 i18n国际化问题

2017年04月14日 ⁄ 综合 ⁄ 共 1819字 ⁄ 字号 评论关闭

根据实验结果,做一个简单的总结:

一.action级别:

对应一个Action可以定义一个资源文件,可供这个action使用,例如HelloAction:

public class HelloAction extends ActionSupport {	
	
	public String execute(){
		return SUCCESS;
	}
	
}

对应的properties文件是:

hello=Hello,world
hello1=Hello,world1

然后访问这个Action,从页面取值是:

<s:property value="getText('hello')" /><br/>
    <s:text name="hello1" /><br/>

即可取出相应的字符串

二.package级别:

这个实验需要感谢李老师,详情可以参见李老师的博客:http://blog.csdn.net/li_tengfei/article/details/6098162

其原理解释如下:Action所在的包或其任意一个父包中定义package.propertiespackage_language_COUTRY.properties资源文件,比如:假设在cn.com.leadfar.struts2.actions下面有一个UserAction,那么你可以在cn.com.leadfar.struts2.actions这个包或其任意一个父包中定义package.properties文件,比如选择cn.com.leadfar包,在它下面定义了三个资源文件

我的三个properties文件定义如下,在com.zizhu.struts包下面:

package.properties文件:

pakcage.msg=package,proerties,none

package_zh_CN.properties文件:

package.msg=package,hello,china

package_en_US.properties文件:

package.msg=package, hehe, english

注意点,这个定义不是全局的,所以全局访问无效,必须访问这个包或这子包的action才有效

访问这个包下面的action,从页面取值:

<s:text name="package.msg" /><br>

能够取出字符串

三.全局资源定义:

名字是任意的,可以自己指定,但需要配置一个常量:

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

定义资源文件,zizhu_en_US.properties,zizhu_zh_CN.properties,这两个文件必须放在classpath下面,放入到任何包底下无效,测试结果就是这样;

资源文件内容:

zizhu_en_US.properties文件:

hello.msg=struts2,i18n,english

zizhu_zh_CN.properties文件:

hello.msg=struts2,i18n china
index_forward_jsp=index.jsp

可以从页面取出值:

<s:text name="hello.msg" /><br>

注意点:1.在所有的properties文件中,中文无效,必须转化成ascii,jdk自带这个工具,不展开提,具体参见李老师博客,或者百度,多了去了;

2.全局的资源文件可以在任何地方使用,而package.properties,<ActionClass>.properties必须访问某个action才能生效

四.扩展点:在struts.xml文件中使用资源文件内容:

正如上面zizhu_zh_CN.properties所示,index_forward_jsp=index.jsp,那么在struts.xml中可以直接使用${index_forward_jsp}取出index.jsp;根据我的理解,真正处理国际化问题的情况可能并不多,而实际之中使用的应该是资源文件的使用,对整个项目来说,怎么统一处理这些资源,例如统一处理提示信息,统一配置,都可能用到这些资源文件,还是很有可能用得到,因为这种方式便于后期的维护,比较方便

全面解析I18N,参加李老师博客:http://blog.csdn.net/li_tengfei/article/details/6098162

抱歉!评论已关闭.