提供多国使用者的软件,界面上的文字也需要能够切换成不同的语言,这被称作多语言化。WinCC的控件中中的文本可以分别输入中文和英文来实现多语言化,在这里输入的文本会被添加到WinCC项目数据库的TXTTable表中,在WinCC的文本库页面可以对翻译的内容进行编辑。但是在脚本中也有许多用于提示或记录的文本,WinCC没有为脚本中的文本提供翻译的功能。
在过去的一些项目中见过两种简陋的解决方法,一种是在脚本中分别写两条不同语言的文本,然后用if/else判断当前语言环境,从中选择一条文本输出,这样做的缺点是需要在写代码时去翻译其中的文本,而且夹杂了用于多语言的语句,使得代码的可读性特别差;另一种方法是把多语言化的代码提取出来封装成函数,在函数中集中翻译,这种方法相比前一种更加合理,但是同样是用if/else翻译文本,代码示例如下,可见并不利于查看和编辑,如果需要再添加第三种语言,此刻就会非常难操作。
借鉴上述的第二种方法,在代码用一个函数翻译文本,但函数中用其他更好的方法去实现文本的翻译,所用的方法要满足以下要求:
能够在类似于Excel表格的环境中编辑翻译的文本;
需要添加其他语言的翻译时,能够方便的添加;
能够随项目移植,即存储翻译文本的文件能够随项目程序拷贝;
项目中经常需要集成两个不同部分的项目程序,所以要能够方便的将两个项目程序的翻译整合在一起。
根据上述要求的限制,如下一些方法将不能采用:
不便于依靠WinCC文本库的TXTTable数据库表存储脚本中的翻译,实际使用中文本库中的内容非常混乱,不能确定哪些文本是脚本翻译中需要的,整合两个项目的程序时不便于操作,不能满足第4点要求。
不能另建一个数据库存储翻译文本,也不能用用户归档存储翻译文本,因为拷贝项目时不会拷贝数据库中的数据,不能满足第3点要求。
目前所想到的较好的方法是用CSV文件存储翻译文本,依靠ADO对象能像数据库一样用SQL查询CSV文件的内容;可以用Excel打开CSV文件进行编辑;需要添加其他语言时只需再CSV文件中新增一列,不需修改脚本;把CSV文件放在项目程序文件夹下,会随着项目程序一起拷贝。下面将介绍具体实现方式。
脚本内文本多语言化的函数示例函数语法如下:
Function TranslateText(text, iLangID)