代码改变世界

11月13日国际化的WEB开发培训日记

2006-11-14 14:54  java ee spring  阅读(250)  评论(0编辑  收藏  举报

讲解了displayTag这个开源的自定义标签的作用与设计思想,让大家自己写一个这样的示意程序,结果很糟糕!
让大家解释${x.name}的内部执行原理,再次复习讲解了迭代标签的编写细节。

讲解了什么是应用程序的国际化,复习了Locale对象和操作系统的Locale设置。讲解了ResourceBundle的资源包管理:

先创建messages.properties、messages_en.properties、messages_zh.properties、messages_zh_cn.properties等文件,每个文件中的内容即为文件名,介绍它们是一个资源包,然后编写java源程序(用缺省的Locale)去读取资源包中的内容,读取到的是zh_cn中的内容,将zh_cn改名为zh_cnx,再执行这个Java程序,读取到的是zh中的内容,将zh改名为zhx,读取的是默认文件中的内容。恢复原来所有的文件名,将源程序中的Locale设置ENGLISH,再执行这个程序,看到的是en中的内容,将en改为enx,提问后再执行(重点),看到的是zh_cn文件中的内容!解释原因,将操作系统的Locale改为英语,再执行,这时候为默认文件中的内容了。
对于中文资源文件中的内容,要用native2ascii工具进行转换,在使用中发现的一个问题:对于“你/好”,native2ascii不转其中的“/”,所以转换的结果为“/u4f60//u597d”,最终导致读取properties文件中的内容时出现问题。appfuse中的displayTag_zh_CN.properties文件中的中文内容居然没有用native2ascii处理,真不知道是哪位国人提交的,看来对中文问题进行过深入研究的人可能还真不多!

接着讲解了WEB开发中的国际化问题,如何得到浏览器的Locale信息,properties文件的存放位置:ResourceBundle是去类装载器搜索的目录中查找,即去类的“根目录”下查找。

我提出一个问题:messages_zh_CN.properties最后的CN是否区分大小写,在使用JDK是,windows上不区分,linux上的情况怎样呢?
冯伟力实验:在tomcat下的jsp中只能读取messages_zh_CN.properties,而无法读取messages_zh_cn.properties文件,如果成功读取zh_CN文件后,再将zh_CN改为zh_cn不会有任何问题,这是因为jsp中缓存了zh_CN.properties文件中的内容,他修改jsp文件后重新访问,tomcat后台提示Webapp ClassLoader找不到zh_CN文件,然后重新加载整个Web应用程序和加载缺省的资源文件。
王涛实验:在tomcat下的jsp中能读取messages_zh_cn.properties文件,并且tomcat将一直缓存资源内容,即使删除zh_cn文件和修改jsp文件重新访问,也没有任何问题,除非重新启动tomcat。
我对冯伟立的建议:用getResourceAsStream方法读取一个资源文件,然后删除这个资源文件,看看访问效果。冯伟立报告的实验结果是:无论是否修改jsp文件,资源内容一直被缓存在类装载器中。

接着讲解了如何通过MessageFormat对象对字符串中的参数进行赋值,从MessageFormat的format方法中意外发现:数组能够作为一个对象传递,在方法内部再将这个对象强制转换成数组。