Struts2国际化实战

网上的教程还挺多,但是我还是尝试了很久才成功。

其实挺简单的Struts2提供了较好的支持。如果只是照着网上的教程做,你很可能会发现各种无效或者null异常或者其他异常什么的。
这里面一个原因是我对Struts确实不熟悉,虽然也用过,但是那只是用过,根本没有深度。

一个简单的Struts2国际化小功能给了我一个教训:首先你至少得知道大体原理,当然能够深入理解是最好的,一点都不理解其运作原理及流程,那么照着网上的教程做就会遇到很多障碍,原因各异,而你也不知道为什么不行,你只能换一个教程,做更多的尝试直到可行。当然这和网上教程的质量也有关系。我自己总结了几点:1、不讲原理的教程不是好教程。2、原理讲的很细但缺少简洁形象的过程概括的教程不是好教程。3、讲了很多原理却没有实践的教程不是好教程。4、实践中没有讲明自己的必要运行环境的教程不是好教程。

下面我就说一下我最后怎么成功的吧,并不是教程。

Struts2国际化简单原理(这里不是其内部实现原理,而是其相关类过程):

Struts2的国际化由Locale类的getLocale()和setLocale()方法来完成动作的,中间应该会通过一些ActionContext或者SessionContext之类的来做,此处略过,涉及到LocaleProvider的一个接口,但是实际上ActionSupport类已经把这些都做进去集成好了,只需要你的Action类集继承了ActionSupport类然后在action请求时含有request_locale参数即可如:
,所以使用Struts2实现国际化要做的事情并不复杂。

环境:

struts2,基本的SSH框架,jdk应该不限版本,tomcat应该不限版本,本人使用Eclipse开发。

实践:

1、创建一个Action类:

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import com.opensymphony.xwork2.ActionSupport;

@Service("changeLocaleAction")
@Scope("prototype")
public class ChangeLocaleAction extends ActionSupport  {
    private static final long serialVersionUID = 1L;
    public String changeLocale() {
        return SUCCESS;
    }
}

2、 在struts.xml中配置:login.jsp为当前页面。(在struts标签的package标签内添加)

<action name="changeLocale" class="changeLocaleAction" method="changeLocale">
    <result name="success">login.jsp</result>
</action>

3、 在struts.xml同级目录下创建ApplicationResources_zh_CN.properties
和ApplicationResources_en_US.properties和ApplicationResources.properties(默认)文件(命名规则为:文件名语言国家.properties)。

4、相应在struts.xml中的struts标签下添加:(此处对应的是默认的语言和资源文件)

<constant name="struts.custom.i18n.resources" value="ApplicationResources"/>
<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="UTF-8" />

5、当前页面中如login.jsp中添加:

<s:url action="changeLocale" var="lan_en">
    <s:param name="request_locale" value="'en_US'"></s:param>
</s:url>
<a href="<s:property value="#lan_en"/>">English</a>

<s:url action="changeLocale" var="lan_cn">
    <s:param name="request_locale" value="'zh_CN'"></s:param>
</s:url> 
<a href="<s:property value="#lan_cn"/>">简体中文</a>

6、保存所有文件运行即可。
注意:如果资源是图片等,则只需要定义为其相对路径即可,如:
pictureLogin=images/login_zh_CN.gif与pictureLogin=images/login_en_US.gif
引用时则为src="<s:text name='pictureLogin'/>"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值