multilanguage的maven项目托管在https://github.com/xionghuiCoder/multilanguage,同时也可以在http://www.oschina.net/p/multilanguage上了解它的简单介绍。
多语系统用于向不同的用户展示不同的语言,比如大陆用户习惯使用简体,港台用户习惯繁体,美国用户习惯英语;用户可以根据自己的喜好自由切换语言。
下面来看看提供多语功能的产品:
oracle的mysql下载页(https://edelivery.oracle.com/):
携程(http://www.ctrip.com/):
阿里的注册页面(http://reg.taobao.com/member/reg/fill_mobile.htm):
百度的招聘页面(http://talent.baidu.com/baidu/web/index/CompbaiduPageindex):
然而这些都是通过开发多个页面来支持多语功能的,这种方案存在一些问题:维护性差(有几种语言就得维护几套页面),扩展性差(新支持一种语言又得开发一套新页面)。
我们可以用多语系统代替以上方案,可以参考multilanguage-web-demo项目(https://github.com/xionghuiCoder/multilanguage-web-demo),启动该web项目(直接运行该项目下的JettyStart.java即可),然后访问http://127.0.0.1:8080/即可体验多语功能:
该多语demo使用ajax动态获取多语资源,并用DOM操作切换多语值;所以只用维护一个页面,扩展新语言时只用配置新的资源文件即可;既提高了维护性又提高了扩展性。
当多语系统变得复杂,需要提高性能、提供容错机制时,可以参考multilanguage-interface-demo项目(https://github.com/xionghuiCoder/multilanguage-interface-demo)。
该demo提供六种接口:
1、http://127.0.0.1:8080/multilanguage/all_tips?relative_path=language&langtype=english&folder_name=01&file_name=test_annotation.properties:
{ 0001: "test/1 annotation", 0002: "test", 0003: "test", 0004: "test//4 annotation", 0005: "test///5 annotation", 0006: "test//", 0007: "test//", 0008: "test////8 annotation", 0009: "test/////9 annotation", 0010: "test////" }
2、http://127.0.0.1:8080/multilanguage/tip?relative_path=language&langtype=english&folder_name=01&file_name=test.properties&langcode=0001 :
"test"
3、http://127.0.0.1:8080/multilanguage/tips?relative_path=language&langtype=english&folder_name=01&file_name=test.properties&langcodes=0001|0002 :
{ 0001: "test", 0002: "begin{0}{1}{2}{3}" }
4、http://127.0.0.1:8080/multilanguage/params_tip?relative_path=language&langtype=english&folder_name=01&file_name=test.properties&langcode=0002¶ms=a|b :
"beginab{2}{3}"
5、http://127.0.0.1:8080/multilanguage/params_tips?relative_path=language&langtype=english&folder_name=01&file_name=test.properties&langcodes=0002|0003¶ms=a|b :
{ 0002: "beginab{2}{3}", 0003: "ab{2}{3}end" }
6、http://127.0.0.1:8080/multilanguage/paramses_tips?relative_path=language&langtype=english&folder_name=01&file_name=test.properties&langcodes=0002|0003¶mses=a|b,c|d :
{ 0002: "beginab{2}{3}", 0003: "cd{2}{3}end" }
基于multilanguage-interface-demo可以开发分布式或者集群的多语系统。
multilanguage是一个多语开发工具包;multilanguage-web-demo和multilanguage-interface-demo都是基于multilanguage开发的。multilanguage主要用于管理多语资源的缓存,它使用软引用和弱引用缓存多语值,并针对资源的访问次数维持一个最大堆和最小堆,当内存不足时会释放访问次数很少的一部分资源;这样既保证了性能也能防止内存泄露。