首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-06-26 
《研磨struts2》第十二章 CRUD综合运用 之 12.4 加入国际化信息12.4??加入国际化信息12.4.1??回顾国际化信息

《研磨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 加入国际化信息

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

          12.4.4??切换语言

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

          ?

          java代码:查看复制到剪贴板打印
          1. <constant?name="struts.locale"?value="en_US?"/>??

          运行结果如下:

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

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

          ?

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

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

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

热点排行