struts2国际化(I18N)

  国际化也叫I18N,是Internationalization的简称。Struts2国际化是建立在Java国际化基础上,只是Struts2框架对Java国际化进行了进一步封装,从而简化了应用程序的国际化。

使用struts2 实现国际化

在上一次的”使用 Struts2 校验器校验用户注册信息“项目为基础上实现国际化:http://www.cnblogs.com/likailan/p/3302284.html

一、在strute.xml中指定资源文件的基名。

在strute.xml文件的struts标签里加入如下代码:

  1. <constant name="struts.custom.i18n.resources" value="message"/>
  2. <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代码:

  1. title=注册
  2. form.email=邮箱:
  3. form.password=密码:
  4. form.repassword=重复密码:
  5. form.phone=电话:
  6. form.submit=提交

message_en_US.properties代码:

  1. title=register
  2. form.email=eMail:
  3. form.password=password:
  4. form.repassword=repassword:
  5. form.phone=phone:
  6. form.submit=submit

三、实现JSP页面信息的国际化显示

把和显示相关的文字都替换成  <s:text name="对应资源文件的键"/> 其中属性 name 的值为资源文件里相对应的key。如:<s:text name="title"/>      <s:text name="form.email"/>

页面代码:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!-- 加载struts2标签库 -->
  4. <%@ taglib uri="/struts-tags" prefix="s"%>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <s:head/>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  10. <!-- 把和显示相关的文字都替换成 <s:text name="对应资源文件的键"/> -->
  11. <title><s:text name="title" /></title>
  12. </head>
  13. <body>
  14. <form action="register.action" method="post">
  15. <table>
  16. <tr>
  17. <!-- 把和显示相关的文字都替换成 <s:text name="对应资源文件的键"/> -->
  18. <td><s:text name="form.email" /></td>
  19. <td><input type="text" name="email"/></td>
  20. <!-- 使用<s:fielderror/>标签输入相应的字段错误信息 -->
  21. <td><s:fielderror fieldName="email"/></td>
  22. </tr>
  23. <tr>
  24. <!-- 把和显示相关的文字都替换成 <s:text name="对应资源文件的键"/> -->
  25. <td><s:text name="form.password" /></td>
  26. <td><input type="password" name="password"/></td>
  27. <td><s:fielderror fieldName="password"/></td>
  28. </tr>
  29. <tr>
  30. <td><s:text name="form.repassword" /></td><td>
  31. <input type="password" name="repassword"/></td>
  32. <td><s:fielderror fieldName="repassword"/></td>
  33. </tr>
  34. <tr>
  35. <td><s:text name="form.phone" /></td>
  36. <td><input type="text" name="phone"/></td>
  37. <td><s:fielderror fieldName="phone"/></td>
  38. </tr>
  39. <tr>
  40. <td><input type="submit" value="<s:text name="form.submit" />"/></td>
  41. <td></td>
  42. <td></td>
  43. </tr>
  44. </table>
  45. </form>
  46. </body>
  47. </html>

四、测试

启动tomcat。用IE打开register.jsp页面。

打开internet选项->点击语言->点击添加,可以看到如下“添加语言”对话框。添加“英语(美国)[en-US]”项,并把该项上移到最上层

刷新页面:

 实现验证错误信息的国际化显示

表单的验证错误信息也需要进行国际化显示,Struts 2 针对编码验证和验证框架都提供了国际化实现,此时验证错误信息以键值对的方式书写在资源文件中,而无需直接书写在validate方法或者验证配置文件中。

一、添加相应的国际化内容到资源文件中

message_zh_CN.properties添加如下国际化内容:

  1. ######### 校验错误信息 ###########
  2. form.email.null=邮箱不能为空
  3. form.email.format=邮箱格式不正确
  4. form.password.null=密码不能为空
  5. form.password.length=密码长度不能少于6
  6. form.repassword.same=两次密码不一至
  7. form.phone.format=电话号码格式不正确

message_en_US.properties添加如下国际化内容:

  1. ######### 校验错误信息 ###########
  2. form.email.null=eMail cannot be null
  3. form.email.format=eMail format is error
  4. form.password.null=password cannot be null
  5. form.password.length=minimum password length is 6
  6. form.repassword.same=repassword should be same with password
  7. form.phone.format=phone format is error

二、修改验证框架的配置文件

修改验证框架的配置文件,去掉具体的验证错误信息,通过 <message> 标签的key属性指定其对应的验证错误信息。

修改后的 RegisterAction-register-validation.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE validators PUBLIC
  3. "-//Apache Struts//XWork Validator 1.0.2//EN"
  4. "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
  5.  
  6. <validators>
  7. <!-- name值为需要被校验的字段,这里对email字段进行校验 -->
  8. <field name="email">
  9. <!-- type值为校验器名,requiredstring:非空字符串校验器 -->
  10. <field-validator type="requiredstring">
  11. <!-- 去掉具体的验证错误信息,通过 <message> 标签的key属性指定其对应的验证错误信息。 -->
  12. <message key="form.email.null" />
  13. </field-validator>
  14. <!-- 一个字段可以配置多个校验器,email:校验邮箱格式 -->
  15. <field-validator type="email">
  16. <!-- 去掉具体的验证错误信息,通过 <message> 标签的key属性指定其对应的验证错误信息。 -->
  17. <message key="form.email.format" />
  18. </field-validator>
  19. </field>
  20.  
  21. <field name="password">
  22. <field-validator type="requiredstring">
  23. <message key="form.password.null" />
  24. </field-validator>
  25. <!-- stringlength:字符串长度校验 -->
  26. <field-validator type="stringlength">
  27. <!-- 为校验器指定参数实现不同的校验规则,minlength:最少长度 -->
  28. <param name="minLength">6</param>
  29. <message key="form.password.length"/>
  30. </field-validator>
  31. </field>
  32.  
  33. <!-- 校验两次密码是否一致,使用 fieldexpression 校验器。expression参数指定判断用的表达式 -->
  34. <field name="repassword">
  35. <field-validator type="fieldexpression">
  36. <!-- 表达式要写在 <![CDATA[]]> 内 -->
  37. <param name="expression"><![CDATA[repassword==password]]></param>
  38. <message key="form.repassword.same"/>
  39. </field-validator>
  40. </field>
  41.  
  42. <!-- 校验电话格式,使用regex正则表达示校验,regexExpression参数指定正则表达式 -->
  43. <field name="phone">
  44. <field-validator type="regex">
  45. <!-- 注意!2.3.15前的版本使用 expression 参数 -->
  46. <param name="regexExpression"><![CDATA[\d{11}]]></param>
  47. <message key="form.phone.format" />
  48. </field-validator>
  49. </field>
  50.  
  51. </validators>

四、测试

打开internet选项->点击语言->点击添加,可以看到如下“添加语言”对话框。添加“英语(美国)[en-US]”项,并把该项上移到最上层。刷新页面:

 通过超链接转换页面 语言-地区

 一、在register.jsp页面中添加如下超连接:

  1. <a href="changelan.action?request_locale=zh_CN">简体中文</a>&nbsp;&nbsp;&nbsp;
  2. <a href="changelan.action?request_locale=en_US">English</a>

跳到一个名为changelan的action里,传递名为request_locale(固定写化)的参数,值为要换转的 语言代号_地区代号。

二、编写相应的action类

ChangelanAction.java代码:

  1. import java.util.Locale;
  2.  
  3. import com.opensymphony.xwork2.ActionContext;
  4. import com.opensymphony.xwork2.ActionSupport;
  5.  
  6. public class ChangelanAction extends ActionSupport{
  7.  
  8. public String execute() throws Exception {
  9. //获得本地默认的语言环境
  10. Locale locale=Locale.getDefault();
  11. //存入到一个session变量中。"WW-TRANS-I18N-LOCALE"为固定写法
  12. ActionContext.getContext().getSession().put("WW-TRANS-I18N-LOCALE", locale);
  13. return SUCCESS;
  14. }
  15.  
  16. }

三、配置struts.xml

在package标签内添加如下action标签:

  1. <action name="changelan" class="ChangelanAction">
  2. <result name="success">register.jsp</result>
  3. </action>

四、测试

页面如下:

点击简体中文:

点击English

使用 Struts 2 实现国际化的更多相关文章

  1. Struts框架的国际化

    本文将通过一个详细的实例来展示Struts框架的国际化,使用的版本号是struts1.1. 案例:在一个页面上有一个下拉框,下拉框中有3个国家的语言选项,各自是"中文简体".&qu ...

  2. 菜鸟学Struts——I18N对国际化的支持

    大家肯定都喜欢玩游戏吧. 对于是一个游戏迷的话,肯定玩过不少很棒的经典单机游戏.比方说,国产的<古墓丽影>.<刺客信条>.<鬼泣>国产的仙剑.古剑等.在众多游戏系列 ...

  3. struts配置文件和国际化

    一.加载包struts2-core-2.3.24.1.jar struts-default.xml :各种栈 org.apache.struts2 -->> default.propert ...

  4. 【JavaEE企业应用实战学习记录】struts国际化

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To change this tem ...

  5. Struts第八篇【资源国际化、对比JSP的资源国际化】

    资源国际化 我们在学JSTL标签的时候就涉及到了资源国际化,,,但是呢,在JSP的章节我并没有写博文来讲解怎么弄-.一方面感觉JSP的资源国际化好麻烦,另一方面是感觉用的地方很少-..因此就没有深入去 ...

  6. Struts 2(七):国际化

    基于Struts 2的Web应用国际化开发非常简单,其中Struts 2的国际化包括如下几部分:校验提示信息国际化.类型转换提示信息国际化.Action信息国际化以及JSP页面国际化. 第一节 JSP ...

  7. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  8. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

  9. Struts框架2ActionError类 内部资料 请勿转载 谢谢合作

    ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中.ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的 ...

随机推荐

  1. 【后缀数组】【poj2774】【 Long Long Message】

    题意: 求两个串的最长连续子串. 我的想法: 枚举第二个串...在第一个串的后缀数组中二分查找. 复杂度NlogN.最坏情况N^2 题解: (3)height 数组:定义height[i]=suffi ...

  2. apache如何在虚拟主机中实现用户验证

    1,在相应的虚拟主机配置文件段,加入<Directory  /data/www.admin.php>                AllowOverride AuthConfig     ...

  3. C# 开机启动代码

     开机启动/关闭 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...

  4. 对Textbox的值转换为带千位符和小数的Decimal字符串

    以下Function可以用于textbox的KeyUp事件: 2014-06-06 发现旧版IE不支持selectionStart还有字符串的"[]"索引获取值, 已经修复这个bu ...

  5. dojo事件

    dojo.connect 和 dojo.disconnect /*建立连接*/ dojo.connect(/*Object|null*/ obj, /*String*/ event, /*Object ...

  6. HDU-1049

    Description An inch worm is at the bottom of a well n inches deep. It has enough energy to climb u i ...

  7. golang Date format

    package main import ( "fmt" "time" ) // @link https://golang.org/pkg/time/ func ...

  8. 使用SQLiteHelper创建数据库并插入数据

    参考<疯狂android讲义>8.4节P424 1.获取SQLiteDatabase实例有2种方法,一是直接new SQLiteDatabase(),另一种使用SQLiteHelper.一 ...

  9. Android 使用BroadcastReceiver的几种方法

    发送自定义广播 全局广播 发送标准广播 1.定义广播接收器.(在发送广播前,需要先定义一个广播接收器,不然发了也是白发) public class MyBroadcastReceiver extend ...

  10. hasClass方法 动画方法说明

    $(this).hasClass("selected");判断是否含有selected样式