通过freemarker指令,实现js文件的国际化,可在js中写表达式
今日有了国际化的需求,以前处理国际化时,对于javascript资源中的国际化问题,一直是个头疼的问题,我们一起来探讨一下,如何使用freemarker实现js文件的国际化。
实现原理:
- 我们将JS文件做为模板,通过freemarker对其进行格式化。
- 扩展freemarker指令,定义资源指令。
- 前台JSP的tag库。
准备工作:
- 定义我们自己的jsp标签 :?<p:script src=”test.js”/>,标签内容: 指定js文件路径,标签内部从request中取locale信息,通过freemarker取到test.js这一模板(我将我的js文件都放到了/scripts目录下),将locale信息作为变量放到模板中,进行格式化。然后写到应用某一目录中,最终我们的<p:script src=”test.js”/>标签,输出内容为:<script type=”text/javascript” src=”/scripts_bin/zh/test.js”>,p:script先通过当前locale和src属性,判断是否格式化之后的js文件存在,例如/scripts_bin/zh/test.js文件不存在,则调用模板输出,存在的话,直接返回URL,
- 问题:开发过程中的问题,上面的描述,貌似我们的JS每次都被格式化,然后存储到另一个目录中,而且下次就不会对那么目录进行重新,当然我们可以通过配置解决此问题,我给系统加入了resource.cache_script配置,如果设为false,则每次都会进行重写。
方案总结:?首先我们将JS文件视为模板,然后封装我们自己的指令,对JS中的表达式进行替换,存放到应用的某一目录下,通过JSP标签,输出不同语言目录下的JS文件。
详细:http://www.codeloger.com/?p=549