在struts2中,国际化的方式其实有两种,第一种方式的大致思路是,根据所传入的语言和国家名称,创建一个Locale实例,然后将这个实例设置到作用域中,从而就可以根据不同的需要来加载不同的资源文件,这个方式需要写java代码。而struts2中还有一种更加简单的方式,本文就只简要绍介一下第二种方式的实现。
首先页面上的效果默认是这样的
当我们点击“中文”或“英文”时,页面的“用户名”和“密码”项可以切换成不同的语言显示。下面是英文状态显示
具体是怎样实现的,下面就简单说明一下。
在struts.xml配置文件中的内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="MessageResource" />
<package name="default" namespace="/" extends="struts-default">
<action name="index">
<result>
/index.jsp
</result>
</action>
</package>
</struts>
这里需要注意的是
常量struts.custom.i18n.resources属性的value值MessageResource是相关资源文件名称的前缀,其中资源文件在这里是这样命名的
后面两个是java所支持的语言和国家,资源文件的内容如下:
英文内容:
index.username=username
index.password=password
中文内容:
index.username=\u7528\u6237\u540D
index.password=\u5BC6\u7801
这个是中文文字转码后的结果,是为了避免乱码产生
这种方式我们甚至连action的java代码都不用写,这里要做的只是在配置文件中设置一下跳转页面就可以了,最后我们在jsp页面中直接调用配置好的action
<a href="/struts2i18n/index?request_locale=zh_CN">中文</a>|<a href="/struts2i18n/index?request_locale=en_US">英文</a>
<s:form action="/index" method="post">
<s:textfield name="username" key="index.username"></s:textfield>
<s:textfield name="password" key="index.password"></s:textfield>
<s:submit value="提交"/>
</s:form>
这里要注意的是,在调用action时,我们要将 java支持的语言和国家当作参数值传入,这里的变量全称为request_locale不可改变,textfield元素中的key属性值对应资源文件相关的key值 ,其实在jsp页面接收资源文件中的值除了以上方法外,还有另外一种,就是通过<s:text name="">
元素接收,其中name属性值对应资源文件相关key值。