从事银行核心系统设计开发的程序猿
分类: 信息化
2015-06-18 07:22:37
*多语言与多环境
系统对多语言的支持,这在某些情况下,也是非常有用的,例如将核心系统部署为海外分行系统。通常情况下,海外系统独立搭建,操作人员部分是当地人员,也可能有派驻人员。同一套环境的多语言随时切换,其实并不存在实际场景,因为数据表内容存放,只会按照一个语言标准。举个例子,核心系统的户名地址等字段,是根据系统所在国家设语言,存放成不同文字,比如中文,而这些字段都会在输入输出中展示。因此,即使是将用户环境和操作界面切换成英文环境,字段内容仍会出现中文。另外,多语言不应额外增加处理的负担。
于是,系统的多语言,就分为两个方面。一是这套系统是否可以轻松做到转向其他语言的翻译,即如何作为一套海外系统部署。二是当系统后台维护人员运行工具时,如果能根据用户做到参数说明和输出展示的语言选择,尽可能符合本地人员和派驻人员的习惯。下面以中文(默认)和英文(辅助)为例,总结一下做法。
数据表部分,对于不同国家的版本,将各数据存放对象的CCSID设置为相应国家语言代码,如中文则为1388。
应用程序部分,区别在于返回报文的某些字符串字段内容语言不同。这些字段的数据来源,除了数据库中直接记录的字段,还可以在应用程序中拼接而成,比如出错信息。核心系统使用了错误信息表,在RPG程序中做错误信息的拼接组装。例如,“EIOER”错误代码内容为“接口&1字段&2值&3不正确”。其中&1,&2,&3由应用程序字符串代入。因此,应用程序中,全部将文本定义成命名为C_MGXXXX的常量。制作其他语言版本时,只需翻译所有C_MG常量,错误信息表和文件的中文描述即可(因为某些错误信息,会拼接表的中文信息,例如:更新表&1失败,&1为PF的中文描述活期分户账,如何获取在统一错误处理部分详细介绍)。
工具部分,就需要考虑操作用户不同时的语言不同了。AS400为CMD提供了多语言提示文件的方法,但CMD只是发起命令界面,执行程序的过程显示就没有办法了。因此换了一种做法,将工具的CMD,PGM等分多套语言版本编译到不同的目标库中。如XXXOBJMON放置默认的中文工具程序,XXXOBJMONE放置辅助的英文版本程序。然后通过用户USRPRF的初始化程序不同,来指定LIBL中的先后顺序,达到执行的不同语言版本的效果。
下面是中文语言习惯的用户USRPRF初始化程序。
下面是英文语言习惯的用户USRPRF初始化程序。注意在OBJMON前会先搜索OBJMONE。
其中,GETPREFIX程序,是获取当前应用环境。系统在一台机器上可以部署多套环境,以前三位环境代码区分。所有的库名前三位即为环境代码,用户登录时,就可以根据LIBL的设置,对应到相应环境。应用程序编写时,尽量使用*LIBL查找目标,如果确需指定库名,则先调用GETPREFIX,根据用户USRPRF的初始化程序所在库前三位,获得环境代码。