我是搞应用程序开发的,所以很少接触那些比较前沿的商业概念比较强的技术,使用和接触的东西也就没那么炫。不过我觉得有很多比较实用的简单方法也可以拿来和大家一起分享一下。
今天我想跟大家分享的是关于应用系统多语言的问题。现在很多系统在开发的时候都提要支持多语言,所以多语言化也渐渐成为软件的一个必不可少的特性了,就连企业内部使用的应用系统也不例外。最近,就在搞一个企业内部使用的应用系统,客户非要搞什么多语言支持(唉,不知道它什么时候才能走出去真正的应用到实际上)。不管了,这毕竟是用户的需求么,那就给实现吧。
说起多语言化支持,无外乎对以下几方面的内容进行设定:
1,外观层
- 页面上所有能显示文字的控件
- 带有文字的图片
- 前台数据验证用的提示信息(javascript部分)
- 后台系统提示信息 (后台数据验证,及运算结果的提示信息)
2,数据访问层
- 向传递的数据库参数
3,数据库
- 部分属性字段使用支持Unicode的数据类型
- 部分基础数据需要填加语言区分字段变双主键 或者 扩展一个带语言区分字段的描述表
4,报表
- 报表文件
5,时间格式的问题
解决办法讨论:
1) 对于数据访问层和数据库方面只需要注意数据类型就可以了,做起来并不困难。
2) 我看到过一些系统将文字控件和图片部分使用theme来保存,但我不喜欢这种做法,那么多文件去维护,虽然做到了外观显示与控制代码脱离,总觉得不太适合用在应用系统的开发中。我们目前的做法是将那些文字全部保存到数据库,资源文件或者xml文件中然后在页面基类中自动设定这些控件的文字。这样既不影响开发人员正长的写代码,而且很容易的管理了页面的显示内容。(具体的做法我会陆续完成)
3) 对于图片我们可以按照语言编码生成文件夹来存放和显示就可以了。
例如: ~/images/languages/en-us/pic1.bmp
~/images/languages/zh-cn/pic1.bmp
4) 由于我们是使用Crystal Report来开发报表,使用RAS来生成报表了。我们只是将报表按照相应的语言存放在相应的文件夹中。对于Reporting Service也可以使用同样的办法。
例如: ras://APP1/en-us/rpt1.rpt
ras://APP1/zh-cn/rpt1.rpt
5) 对于不用语言下不同的时间格式,我们可以将这些格式存储在数据库里面。使用统一的时间验证方面就可以搞定了。
欢迎大家一起来讨论如何实现多语言支持的。稍后我会把如何实现在页面基类中自动设定控件的文字,前台后台数据验证及提示信息的多语言支持的做法再跟大家一起分享一下。