工作环境:Windows Server2003SE,Eclipse3.1.1,MySQL5.0,Tomcat5.5.9,JDK1.5.0_07,Ant1.6.5
在中文环境下使用AppFuse,会遇到DisplayTag的题头信息乱码现象(最新发布的AppFuse1.9.4也有这个问题),如下图:
解决方法:
1.查看web/web-inf/classes目录下是否存在displaytag_zh_CN.properties配置文件,1.9.1前的版本没有中文版本的配置文件.如果Eclipse中打开看到的是乱码,选择File->Properties 选择UTF-8类型查看,下同。
2.打开项目build.xml文件,找到target copy-resources所在位置(通过字符串copy-resources查找快)
将原来的代码:
<target name="copy-resources" depends="prepare"
description="Copy .properties and .xml files from source directory">
<copy todir="${build.dir}/web/classes" includeEmptyDirs="no">
<fileset dir="web/WEB-INF/classes">
<exclude name="ApplicationResources_zh*.properties"/>
<include name="*.properties"/>
<include name="*.xml"/>
<include name="*.vm"/>
</fileset>
<filterset refid="variables.to.replace"/>
</copy>
<native2ascii src="web/WEB-INF/classes" _fcksavedurl=""web/WEB-INF/classes"" dest="${build.dir}/web/classes"
includes="ApplicationResources_zh*.properties" encoding="UTF-8"/>
<generate-database-properties/>
<copy todir="${build.dir}/web/classes" file="database.properties"/>
</target>
修改为(添加红色的):
<target name="copy-resources" depends="prepare"
description="Copy .properties and .xml files from source directory">
<copy todir="${build.dir}/web/classes" includeEmptyDirs="no">
<fileset dir="web/WEB-INF/classes">
<exclude name="ApplicationResources_zh*.properties"/>
<exclude name="displaytag_zh*.properties"/>
<include name="*.properties"/>
<include name="*.xml"/>
<include name="*.vm"/>
</fileset>
<filterset refid="variables.to.replace"/>
</copy>
<native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes"
includes="ApplicationResources_zh*.properties" encoding="UTF-8"/>
<native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes"
includes="displaytag_zh*.properties" encoding="UTF-8"/>
<generate-database-properties/>
<copy todir="${build.dir}/web/classes" file="database.properties"/>
</target>
通过native2ascii将displaytag_zh_CN.properties配置文件同ApplicationResources_zh*.properties一样转换下,就OK了。奇怪Matt Raible在最近AppFuse1.9.4中都没改过来:)
=====
1.build.xml里面display资源没有国际化处理,也就是没有进行编码,在build.xml进行修改使之进行国际化.
修改方案:
<native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes"
includes="ApplicationResources_zh*.properties" encoding="UTF-8"/>
<generate-database-properties/>
改为:
<native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes"
includes="*_zh*.properties" encoding="UTF-8"/>
<generate-database-properties/>
2.Tomcat 的URLEnCording要设置为UTF8,应为appfuse是以utf-8打包的
3.就是要对原始ApplicationResources_zh_cn.properties进行ascii编码转换然后丢到classes里面,不要用他ant自动转换过的.奇怪的是appfuse的ant的时候是对文件进行转换了,但是还是有部分中文存在乱码,奇怪ing......不知道是appfuse的疏忽还是什么.继续研究中...我是appfuse-1.9-src的包.但是我手工转了下ant之前的源码,发现乱码问题消失.就这个原因搞了我一个晚上....郁闷
修改方案:
native2ascii -encoding UTF-8 ApplicationResources_zh_CN.properties te (te为转后文件名)
native2ascii te ApplicationResources_zh_CN.properties1 -reverse(转回来 呵呵)
补充一点,在appfuse的appfuse-1.9-src这个包里的 ApplicationResource...直接打开是中文是乱码,可以采用上面的两条命令把它还原出来.便于我们的开发然后修改ant任务即可.而对于appfuse-jsf-1.9-src来说,它的applicationResource...打开后就是我们可以看懂的中文:).