《研磨struts2》第十二章 CRUD综合运用 之 12.4 加入国际化信息

12.4  加入国际化信息

12.4.1  回顾国际化信息

接下来给上面的示例加上对国际化信息的支持。

先来回忆一下国际化信息的基本知识,国际化信息的知识分成三大部分:

  • 如何配置国际化信息?

l         全局级别。在struts.xml中配置常量struts.custom.i18n.resources,来指定国际化文件的名字。

l         Action级别。在Action的包中建立与Action同名的国际化文件,如(UserAction就要配合UserAction.properties)。

  • 在哪里使用国际化信息?

l         在页面上通过<s:text/>标签或表单标签引用。

l         在继承ActionSupport类的Action中使用getText方法引用。

l         在验证框架中的<message>标签中引用。

  • 如何指定使用哪种语言?

l         浏览器配置。

l         在struts.xml中配置常量struts.locale。

l         在request中传入名为request_locale的参数。

在本节的示例中,三大部分各取一个知识点使用即可,示例将采用Action级别的国际化信息文件,在页面上通过<s:text/>标签或表单标签引用,在struts.xml中配置常量struts.locale来指定语言。

       示例中,只需要支持zh_CN和en_US两种语言即可。

12.4.2  准备国际化信息文件

采用Action级别的国际化信息文件。就需要在UserAction的同包下,建立两个国际化信息文件,UserAction_zh_CN.properties和UserAction_en_US.properties。

要注意:在编写具体的国际化信息文件的时候,中文是不可以直接使用的,必须要转码后才能使用。

在国际化信息文件中,只需要给出各个页面的标题和UserModel各个属性名作为表单域前面的文字即可,因此,UserAction_en_US的内容为:

 

java代码:
  1. add.title = Create a User  
  2. add.submit = Create  
  3. update.title = Update a User  
  4. update.submit = Update  
  5. query.title = Query Users  
  6. query.submit = Query  
  7. query.age1 = Min Age  
  8. query.age2 = Max Age  
  9. query.error = your min age is more than your max age.  
  10. list.title = Users Info  
  11. list.operation = operation  
  12. list.add = Create a User  
  13. list.query = Query Users  
  14. user.userId = userId  
  15. user.name = name  
  16. user.sex = sex  
  17. user.age = age  

由于中文不能直接使用,先写出中文内容的源文件UserAction_src_zh_CN.properties,文件的内容为:

 

java代码:
  1. add.title = 添加用户  
  2. add.submit = 添加  
  3. update.title = 修改用户  
  4. update.submit = 修改  
  5. query.title = 查询用户  
  6. query.age1 = 年龄最小值  
  7. query.age2 = 年龄最大值  
  8. query.submit = 查询  
  9. query.error = 您输入的年龄最小值大于最大值  
  10. list.title = 用户信息  
  11. list.operation = 操作  
  12. list.add = 添加用户  
  13. list.query = 查询用户  
  14. user.userId = 用户编号  
  15. user.name = 姓名  
  16. user.sex = 性别  
  17. user.age = 年龄  

然后通过native2ascii,其命令为“native2ascii 源文件 目标文件”:

 

java代码:
  1. native2ascii UserAction_src_zh_CN.properties UserAction_zh_CN.properties  

得到真正能用的UserAction_zh_CN.properties

 

java代码:
  1. add.title = \u6dfb\u52a0\u7528\u6237  
  2. add.submit = \u6dfb\u52a0  
  3. update.title = \u4fee\u6539\u7528\u6237  
  4. update.submit = \u6dfb\u52a0  
  5. query.title = \u67e5\u8be2\u7528\u6237  
  6. query.age1 = \u5e74\u9f84\u6700\u5c0f\u503c  
  7. query.age2 = \u5e74\u9f84\u6700\u5927\u503c  
  8. query.submit = \u67e5\u8be2  
  9. query.error = \u60A8\u8F93\u5165\u7684\u5E74\u9F84\u6700\u5C0F\u503C\u5927\u4E8E\u6700\u5927\u503C  
  10. list.title = \u7528\u6237\u4fe1\u606f  
  11. list.operation = \u64cd\u4f5c  
  12. list.add = \u6dfb\u52a0\u7528\u6237  
  13. list.query = \u67e5\u8be2\u7528\u6237  
  14. user.userId = \u7528\u6237\u7f16\u53f7  
  15. user.name = \u59d3\u540d  
  16. user.sex = \u6027\u522b  
  17. user.age = \u5e74\u9f84  

12.4.3  让页面来使用国际化信息

在页面上使用国际化信息的方法有两种:

  • 通过<s:text name=""/>中的name属性来引用国际化信息中的key。
  • 通过表单标签的key属性来引用国际化信息中的key,如<s:textfield name=”user.userId” key=”user.userId”/>,其他表单标签也类似。而且如果key属性和name属性相同,只写key属性,去掉name属性也行,提交的时候会按照key属性的值提交。而且原来指定表单域前面的文字的label属性也可以去掉了。

仅以在add.jsp上使用国际化信息为例,

 

java代码:
  1. <%@ page language="java" contentType="text/html; charset=gb2312"  
  2.     pageEncoding="gb2312"%>  
  3. <%@taglib prefix="s" uri="/struts-tags" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  8. <title><s:text name="add.title"/></title>  
  9. </head>  
  10. <body>  
  11. <s:form action="userAdd" method="post">  
  12.     <s:textfield key="user.userId"/>  
  13.     <s:textfield key="user.name"/>  
  14.     <s:select list="sexs" key="user.sex"/>  
  15.     <s:textfield key="user.age"/>  
  16.     <s:submit name="" key="add.submit"/>  
  17. </s:form>  
  18. </body>  
  19. </html>  

在这个页面上,<title>内引用了<s:text name="add.title"/>来引用国际化信息;而<s:textfield key="user.userId"/>更是去掉了name属性和label属性,key属性既代表了引用user.userId这条国际化信息,又代表了提交是这个文本框名为user.userId,其他的表单标签也类似。

       但是,有一个特殊的<s:submit/>标签,它作为提交按钮,并不应该被作为参数传入下一个Action,所以,它的name属性被设置为空字符串,它的key属性仍指明了到底引用哪条国际化信息。

       其余的update.jsp、query.jsp和list.jsp也像add.jsp一样,请读者把握到底是显示内容,还是表单域,选用合适的方法进行引用国际化信息,这里就不再赘述了。

       由于现在struts.xml中注册的语言信息为zh_CN:

 

java代码:
  1. <constant name="struts.locale" value="zh_CN"/>  

《研磨struts2》第十二章 CRUD综合运用 之 12.4 加入国际化信息_第1张图片

图12.5 中文信息下的添加页面

12.4.4  切换语言

只需要把struts.xml中的语言信息修改为en_US,而不需要修改任何其他东西,add.jsp就可以呈现在引用信息下的状态:

 

java代码:
  1. <constant name="struts.locale" value="en_US "/>  

运行结果如下:

《研磨struts2》第十二章 CRUD综合运用 之 12.4 加入国际化信息_第2张图片

图12.6 英文信息下的添加页面

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4112.html

欢迎访问http://sishuok.com获取更多内容

你可能感兴趣的:(struts2)