- 简介
这次练习的内容是Struts2项目的国际化。什么是国际化,显然从字面就可以看出来,是为了让做出来的项目可以在世界上任何国家的人都能浏览并理解上面的内容。简单来说就是语言问题,把网页中所有中文用其它语言来替代,这就是国际化。替换的方式不是重新写一个界面,而是使用Struts2的国际化功能快速方便地进行替换。
- 开发环境和工具
已配置最新版Java开发环境Windows操作系统。MyEclipse 2014/2016,Tomcat 7.0/8.0/9.0。
- 具体操作步骤、代码与分析
在开始国际化之前,首先我们需要会基本的struts2表单标签的使用,不然也没东西让你国际化对吧。学会了那些基础的东西才能谈国际化的问题,如果那些不会的话建议移步我的另一篇博客
http://blog.csdn.net/qq_33171970/article/details/51380991
这次的项目也是表单,内容和上次的差不多,因为这次重点不是表单嘛~准备好这些东西之后,就开始准备学习国际化吧~
1.下载安装ResourceBundle Editor插件
首先,我们需要安装一个插件。这个插件的作用是建立key值和对应的语言的值的映射关系,如果没有这个插件那么国际化也无从谈起。为什么需要建立映射,建立干什么,怎么用,看到后面就知道了,我们先把它装起来再说。
为了找这个插件,我在网上扒拉了好久,最后总算找到了这个插件,为避免大家再浪费时间在这个上面,我把我找到的这个传到网盘上分享给大家吧,大家直接下载就行:
链接: http://pan.baidu.com/s/1bY7FNw 密码: xywy
把这个压缩包解压之后会看到一个plugins文件夹,把这个文件夹复制到MyEclipse安装目录的dropins文件夹下面,如图:(如果安装目录自己没有选择的话一般在C:\Program Files\或者C:\Program Files (x86)\下,自己找找。)
复制好之后打开MyEclipse,打开Windows->Preference,如果出现下图中圈起来的那几行,就说明插件已经安装好了。
没错,资源文件编辑器就是ResourceBundle Editor的中文,不要怀疑~继续下一步啦~
2.配置web.xml、struts.xml
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <filter> <filter-name>struts 2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts 2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
这个就是struts2的,完全没变。struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.i18n.encoding" value="gb2312"></constant> //国际化加了这一句,大概意思就是让它处理国际化这个事件。(我猜的) <package name="default" extends="struts-default" > //这些东西还是之前的,用来处理表单的action请求 <action name="save" class="org.action.StrutsAction" > <result name="error">/error.jsp</result> <result name="input">/index.jsp</result> <result name="success">/success.jsp</result> </action> </package> </struts>
3.了解国际化的三种方式,修改jsp页面
在以上的东西都配置好之后,就开始准备到表单提交的jsp修改代码以国际化吧~
首先,如果我们对一个内容进行国际化,我们有三种方式:
第一种:<s:text name="xxx"/>方式
这个标签是常用于国际化的标签,它会根据name的值去资源文件中匹配,如果匹配到那么就会显示资源文件里面的值。如果无法匹配到,那么就会显示name的值。资源文件是什么怎么配在后面会说。
这种方式适合于一般文本的国际化。
第二种:<s:textfield name="xxx" key="xxx"/>方式
这种方式是适用于表单标签的,比如说之前我们的显示表单项前面的内容用的是lable="xx",但是那样是没办法国际化的,表单元素前面内容的提示信息国际化就是加一个key="xx",请注意这种方式与第一种方式的区别,第一种方式的值是name,用name的值去匹配以显示对应的内容。而这种方式去匹配的关键字不是name,而是key,表单元素里面的name是传值用的,请注意区分。
简言之,就是第二种方式的key相当于第一种方式的name。
第三种:getText()方法
这个方法相当于万能药,以上的两种方式都可以被替换。它是ActionSupport类中的一个方法。
<s:text name="xxx"/>
<s:textfield name="xxx" key="xxx"/>
使用getText()方法可以实现为:
<s:property value="%{getText('xxx')}"/>
<s:textfield label="%{getText{'xxx'}}"/>
注意格式别搞错了,相当于第一种方式的name第二种方式的key的就是getText('xxx')单引号里面的内容。
其它的注意点参考代码吧~
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <%@taglib prefix="sx" uri="/struts-dojo-tags"%> <html> <head> <title>Struts2国际化</title> <sx:head/> <s:head/> </head> <body> <div style="margin-top:140px;margin-left:38%;font-family:Microsoft YaHei;text-align:center"> <s:i18n name="indexResource"> //这里值得是资源文件的名字,要与下面所建立的资源文件名字一样 <s:form action="save.action" method="post" > <table> <tr> <s:textfield name="number" key="number"></s:textfield> //第二种方式 </tr> <tr> <s:textfield name="name" key="name"></s:textfield> </tr> <tr> <s:radio list="#{1:'男',0:'女'}" name="sex" key="sex" value="1"> </s:radio> </tr> <tr> <sx:datetimepicker name="birthday" key="birthday" ></sx:datetimepicker> </tr> <tr> <s:textfield key="profe" name="profe"></s:textfield> </tr> <tr> <s:textarea name="note" key="note"></s:textarea> </tr> <tr> <td><s:submit value="%{getText('submit')}"></s:submit> //第三种方式 <s:reset value="%{getText('reset')}"></s:reset></td> </tr> <tr> 这是一个测试:<s:text name="test"/> //第一种方式 </tr> </table> </s:form> </s:i18n> </div> </body> </html>
4.建立对应的资源文件
资源文件就是存放上述name、value对应的值的文件,也就是完成国际化的原理所在。看一看就明白了。
首先在src下面新建一个文件struts.properties,这个文件是用来管理国际化资源文件的,我们只用了一个indexResource,所以添加一行内容:
注意别搞错了啊。struts.custom.il8n.resources=indexResource
然后再在src文件夹下面新建对应语言的资源文件,这个文件注意命名格式,因为它是按照文件名去匹配资源文件的,如果名字错了就找不到了。命名格式见下面:
中文:indexResource_zh_CN.properties
英文(美国):indexResource_en_US.properties
前面的indexResource这个值需要与上面struts.properties里面和jsp里面的值对应。
这两个文件新建好以后,选一个右键,Open With有一个资源文件编辑器,没错,就是我们之前装的那个插件,用这个打开之后界面如下:
是这样吗?废话当然不是,我这个是已经配好的,你新建的当时是空白,不过看到这里你应该就懂了,只需要把jsp里面的name(第一种方式),key(第二种方式),。。。还有第三种方式的值作为左边的value,右边设置对应的内容,就可以自动替换了,简单吧~
5.部署运行项目,查看结果
在服务器上部署运行该项目,会发现还是中文的,没啥反应,这怎么知道自己是成功了还是没成功呢?
这里的国际化是根据使用者的语言环境来匹配的,也就是会识别系统的语言,我们把系统的语言给改掉就可以看到结果了。
更改系统语言的方法(win10)控制面板/时钟、语言/语言,如果没有安装英文还要安装一下英文。安装之后把它设为首选项,然后还要重启系统生效。。。再次打开就会发现它已经变成英文了。
如果重启之后,你又回来的话,你就会懵逼地发现,卧槽什么鬼怎么系统都变成英文了。没错,这个时候你再打开工程,部署运行。下面放图。
安装并且重启电脑之后是这样:
那么项目的样子分别是:
和
好了,到这里练习完成~~~
对了,关于为什么i18n就是国际化的意思,因为国际化单词是internationalization,首字母i,尾字母n,中间还有18个字母。。。。。懂了吧。。。。真相是因为这个单词太特么长了大家打者都心累+手累,所以就变成大家默认的i18n了。。。
代码照旧上传到网盘~
链接: http://pan.baidu.com/s/1c7J9l8 密码: sqqi
此外,老是被别的地方转的搞得自己博客的访问量都受到了很大影响。所以附上本文的原文链接,你转载不给我加我就自己加,哼,你来打我啊。
/*
*本文链接:http://blog.csdn.net/qq_33171970/article/details/51401480
*作者:桐小目
*/