struts2国际化配置

struts2国际化(I18N)
  国际化也叫I18N,是Internationalization的简称。Struts2国际化是建立在Java国际化基础上,只是Struts2框架对Java国际化进行了进一步封装,从而简化了应用程序的国际化。
使用struts2 实现国际化
在上一次的”使用 Struts2 校验器校验用户注册信息“项目为基础上实现国际化:http://www.cnblogs.com/likailan/p/3302284.html
 
一、在strute.xml中指定资源文件的基名。
在strute.xml文件的struts标签里加入如下代码:
<constant name="struts.custom.i18n.resources" value="message"/>
<constant name="struts.i18n.encoding" value="UTF-8" />
通过“struts.custom.i18n.resources”属性指定国际化资源文件的基名为“message”,位于src目录下。如果属性值为“cn.jbit.message”,则资源文件的基名仍是“message”,但位于“cn.jbit”包中。还可以通过“struts.i18n.encoding”属性指定默认的编码方案。如果要进行国际化,必须指定为“UTF-8”。
二、创建资源文件,用来存放相应的资源
资源文件为properties文件,命名规则为:基名 _语言代号_地区代号.properties。基名就是第一步里设置的“message”。语言代号和地区代号可以在IE里查看:打开IE->打开internet选项->点击语言->点击添加,可以看到如下“添加语言”对话框,里面就有显示各种语言和地区的代号:
在src目录下添加分别为 中文-中国 和 英文-美国 的资源文件。那么对应的文件名就是:
中文-中国:message_zh_CN.properties
英文-美国:message_en_US.properties
message_zh_CN.properties代码:
title=注册
form.email=邮箱:
form.password=密码:
form.repassword=重复密码:
form.phone=电话:
form.submit=提交
message_en_US.properties代码:
title=register
form.email=eMail:
form.password=password:
form.repassword=repassword:
form.phone=phone:
form.submit=submit
三、实现JSP页面信息的国际化显示
把和显示相关的文字都替换成  <s:text name="对应资源文件的键"/> 其中属性 name 的值为资源文件里相对应的key。如:<s:text name="title"/>      <s:text name="form.email"/>
页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
 <!-- 加载struts2标签库 --> 
 <%@ taglib uri="/struts-tags" prefix="s"%> 
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
 <html> 
 <head> 
 <s:head/> 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <!-- 把和显示相关的文字都替换成 <s:text name="对应资源文件的键"/> -->
 <title><s:text name="title" /></title>
 </head>
 <body>
 <form action="register.action" method="post">
 <table>

 <tr>
 <!-- 把和显示相关的文字都替换成 <s:text name="对应资源文件的键"/> -->
 <td><s:text name="form.email" /></td>
 <td><input type="text" name="email"/></td>
 <!-- 使用<s:fielderror/>标签输入相应的字段错误信息 -->
 <td><s:fielderror fieldName="email"/></td>
 </tr>
 <tr>
 <!-- 把和显示相关的文字都替换成 <s:text name="对应资源文件的键"/> -->
 <td><s:text name="form.password" /></td>
 <td><input type="password" name="password"/></td>
 <td><s:fielderror fieldName="password"/></td>
 </tr>
 <tr>
 <td><s:text name="form.repassword" /></td><td>
 <input type="password" name="repassword"/></td>
 <td><s:fielderror fieldName="repassword"/></td>
 </tr>
 <tr>
 <td><s:text name="form.phone" /></td>
 <td><input type="text" name="phone"/></td>
 <td><s:fielderror fieldName="phone"/></td>
 </tr>
 <tr>
 <td><input type="submit" value="<s:text name="form.submit" />"/></td>
 <td></td>
 <td></td>
 </tr>
 </table>
 </form>
 </body>
 </html>
四、测试
启动tomcat。用IE打开register.jsp页面。
打开internet选项->点击语言->点击添加,可以看到如下“添加语言”对话框。添加“英语(美国)[en-US]”项,并把该项上移到最上层
刷新页面:
 
 实现验证错误信息的国际化显示
表单的验证错误信息也需要进行国际化显示,Struts 2 针对编码验证和验证框架都提供了国际化实现,此时验证错误信息以键值对的方式书写在资源文件中,而无需直接书写在validate方法或者验证配置文件中。
一、添加相应的国际化内容到资源文件中
message_zh_CN.properties添加如下国际化内容:
######### 校验错误信息 ###########
form.email.null=邮箱不能为空
form.email.format=邮箱格式不正确
form.password.null=密码不能为空
form.password.length=密码长度不能少于6位
form.repassword.same=两次密码不一至
form.phone.format=电话号码格式不正确
message_en_US.properties添加如下国际化内容:
######### 校验错误信息 ###########
form.email.null=eMail cannot be null
form.email.format=eMail format is error
form.password.null=password cannot be null
form.password.length=minimum password length is 6
form.repassword.same=repassword should be same with password
form.phone.format=phone format is error
二、修改验证框架的配置文件
修改验证框架的配置文件,去掉具体的验证错误信息,通过 <message> 标签的key属性指定其对应的验证错误信息。
修改后的 RegisterAction-register-validation.xml:
<?xml version="1.0" encoding="UTF-8"?> 
 <!DOCTYPE validators PUBLIC
 "-//Apache Struts//XWork Validator 1.0.2//EN"
 "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> 

 <validators> 
 <!-- name值为需要被校验的字段,这里对email字段进行校验 --> 
 <field name="email"> 
 <!-- type值为校验器名,requiredstring:非空字符串校验器 -->
 <field-validator type="requiredstring">
 <!-- 去掉具体的验证错误信息,通过 <message> 标签的key属性指定其对应的验证错误信息。 -->
 <message key="form.email.null" />
 </field-validator>
 <!-- 一个字段可以配置多个校验器,email:校验邮箱格式 -->
 <field-validator type="email">
 <!-- 去掉具体的验证错误信息,通过 <message> 标签的key属性指定其对应的验证错误信息。 -->
 <message key="form.email.format" />
 </field-validator>
 </field>


 <field name="password">
 <field-validator type="requiredstring">
 <message key="form.password.null" />
 </field-validator>
 <!-- stringlength:字符串长度校验 -->
 <field-validator type="stringlength">
 <!-- 为校验器指定参数实现不同的校验规则,minlength:最少长度 -->
 <param name="minLength">6</param>
 <message key="form.password.length"/>
 </field-validator>
 </field>


 <!-- 校验两次密码是否一致,使用 fieldexpression 校验器。expression参数指定判断用的表达式 -->
 <field name="repassword">
 <field-validator type="fieldexpression">
 <!-- 表达式要写在 <![CDATA[]]> 内 -->
 <param name="expression"><![CDATA[repassword==password]]></param>
 <message key="form.repassword.same"/>
 </field-validator>
 </field>


 <!-- 校验电话格式,使用regex正则表达示校验,regexExpression参数指定正则表达式 -->
 <field name="phone">
 <field-validator type="regex">
 <!-- 注意!2.3.15前的版本使用 expression 参数 -->
 <param name="regexExpression"><![CDATA[\d{11}]]></param>
 <message key="form.phone.format" />
 </field-validator>
 </field>

 </validators>

 

四、测试
 
打开internet选项->点击语言->点击添加,可以看到如下“添加语言”对话框。添加“英语(美国)[en-US]”项,并把该项上移到最上层。刷新页面:
 通过超链接转换页面 语言-地区
 一、在register.jsp页面中添加如下超连接:
<a href="changelan.action?request_locale=zh_CN">简体中文</a>&nbsp;&nbsp;&nbsp;
<a href="changelan.action?request_locale=en_US">English</a>
跳到一个名为changelan的action里,传递名为request_locale(固定写化)的参数,值为要换转的 语言代号_地区代号。
二、编写相应的action类
ChangelanAction.java代码:
import java.util.Locale;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;


public class ChangelanAction extends ActionSupport{

public String execute() throws Exception {
 //获得本地默认的语言环境11 Locale locale=Locale.getDefault();
 //存入到一个session变量中。"WW-TRANS-I18N-LOCALE"为固定写法13 ActionContext.getContext().getSession().put("WW-TRANS-I18N-LOCALE", locale);
   return SUCCESS;
 }

}

 

三、配置struts.xml
在package标签内添加如下action标签:
<action name="changelan" class="ChangelanAction">
<result name="success">register.jsp</result></action>
四、测试
页面如下:
点击简体中文:
点击English
posted @ 2019-11-21 10:00  Liang`Friday  阅读(211)  评论(0编辑  收藏  举报