发明内容
有鉴于此,本发明的第一个主要目的在于提供一种支持多语用户界面的系统,能够提高切换语种时的速度,降低开发难度。
本发明的第二个主要目的在于提供一种支持多语用户界面的方法,能够提高切换语种时的速度,降低开发难度。
为达到上述第一个主要目的,本发明提供了一种支持多语用户界面的系统,该系统包括更新处理子系统和切换控制子系统;
更新处理子系统,用于将用户界面中的原始语种字段替换为全局字符串指针,确定所述原始语种字段对应的各语种的目标语种字段及其加载地址,并将全局字符串指针、各语种的目标语种字段及其加载地址发送给所述切换控制子系统;
切换控制子系统,用于接收用户确定的目标语种,根据该目标语种对应的目标语种字段及其加载地址为接收的全局字符串指针赋值,刷新用户界面。
其中,所述更新处理子系统包括查找替换单元、翻译单元和资源转换单元;
所述查找替换单元,用于将用户界面中的原始语种字段替换为全局字符串指针,将被替换的原始语种字段发送给所述翻译单元;将所述全局字符串指针发送给所述切换控制子系统;
所述翻译单元,用于按照用户界面支持的语种,根据接收的所述原始语种字段,翻译出各语种的目标语种字段,将所述各语种的目标语种字段发送给所述资源转换单元;
所述资源转换单元,用于分别确定接收的所述各语种的目标语种字段的加载地址,将各语种的目标语种字段及其加载地址发送给切换控制子系统。
其中,所述切换控制子系统包括存储单元、用户设置单元、切换单元和刷新单元;
所述存储单元,用于接收所述资源转换单元发送的各语种的目标语种字段及其加载地址;按照所述加载地址保存各语种的目标语种字段;向所述切换单元返回目标语种对应的目标语种字段的加载地址;
所述用户设置单元,用于接收用户确定的目标语种,再发送给所述切换单元;
所述切换单元,根据接收的目标语种,从所述存储单元中获取该目标语种对应的目标语种字段的加载地址,为接收自查找替换单元的全局字符串指针赋值,然后向所述刷新单元发送刷新命令;
所述刷新单元,用于根据接收自所述切换单元的刷新命令,刷新用户界面。
其中,所述查找替换单元包括替换模块和原始语种字段表生成模块;
所述替换模块,用于将用户界面中的原始语种字段替换为全局字符串指针,将过滤掉重复字段的所述被替换的原始语种字段按替换顺序发送给原始语种字段表生成模块;将全局字符串指针按替换顺序发送给所述切换控制子系统;
所述原始语种字段表生成模块,用于将按所述替换顺序接收的原始语种字段,按同样顺序写入原始语种字段表,将所述原始语种字段表发送给所述翻译单元。
所述翻译单元,用于根据接收的所述原始语种字段表中的原始语种字段,翻译出各语种的目标语种字段后,按照原始语种字段表存储顺序,将翻译后的各语种的目标语种字段写入目标语种字段表,发送给所述资源转换单元。
所述资源转换单元包括转换模块和定址配置信息存储模块;所述定址配置信息存储模块,存储有预先设置的加载起始地址;所述转换模块,用于接收所述翻译单元发送的各语种的目标语种字段,从定址配置信息存储模块中获取预先设置的加载起始地址,根据该加载起始地址和各语种的目标语种字段的长度,计算所述各语种的目标语种字段的加载地址,将各语种的目标语种字段及其加载地址发送给切换控制子系统。
所述更新处理子系统进一步包括原始语种字段表存储单元、资源比较单元和差异生成单元;
其中,所述原始语种字段表存储单元,用于将所述原始语种字段表生成模块发送的原始语种字段表存储为旧的原始语种字段表;将接收自所述资源比较单元的新原始语种字段保存;
所述资源比较单元,用于从所述原始语种字段表存储单元中获取旧原始语种字段表;比较更新后用户界面中的原始语种字段与旧原始语种字段表中的原始语种字段的差异,根据差异比较结果,生成新原始语种字段表;将所述新原始语种字段表保存在所述原始语种字段表存储单元中,同时发送给所述翻译单元;将所述差异比较结果发送给差异生成单元;
所述差异生成单元,用于根据接收的所述差异比较结果,生成差异表输出;
所述翻译单元进一步用于根据接收的所述新原始语种字段表中的原始语种字段,翻译生成新目标语种字段表。
为了实现对系统支持语种的更新,所述更新处理子系统进一步包括目标语种字段表存储单元,用于将接收自所述翻译单元的目标语种字段表存储为旧目标语种字段表;
所述翻译单元进一步用于,将生成的所述目标语种字段表保存在所述目标语种字段表存储单元;在更新目标语种或目标语种字段时,从所述目标语种字段表存储单元获取旧目标语种字段表,进行更新处理后,将生成的新目标语种字段保存在所述目标语种字段表存储单元,同时发送给所述资源转换单元。
为了实现上述第二个主要目的,本发明提供了一种支持多语用户界面的方法,该方法包括以下步骤:
将用户界面中的原始语种字段替换为全局字符串指针;
确定所述原始语种字段对应的各语种的目标语种字段及其加载地址;
用户确定目标语种,根据该目标语种的目标语种字段及其加载地址为所述全局字符串指针赋值,再刷新用户界面。
所述确定各语种的目标语种字段为:按照用户界面支持的目标语种,根据被替换的原始语种字段翻译出各语种的目标语种字段。
所述为全局字符串指针赋值之前,进一步包括:将各语种的目标语种字段载入其加载地址;
所述为全局字符串指针赋值为:根据用户确定的目标语种,将该目标语种的目标语种字段的加载地址赋值给所述全局字符串指针。
所述将原始语种字段替换为全局字符串指针包括:将各个原始语种字段分别替换为全局字符串指针,将被替换的各原始语种字段过滤掉重复字段后,按替换顺序写入原始语种字段表;
所述翻译出各语种的目标语种字段为:根据所述原始语种字段表中的原始语种字段翻译出各语种的目标语种字段,按照原始语种字段表的存储顺序,将翻译后的各语种的目标语种字段写入目标语种字段表。
该方法进一步包括:预先设置加载起始地址;所述确定各语种的目标语种字段的加载地址为:根据预先设置的加载起始地址和各语种的目标多语字段的长度,计算所述各语种的目标多语字段的加载地址。
所述生成原始语种字段表之后,进一步包括:将所述原始语种字段表保存为旧原始语种字段表;
该方法进一步包括:比较更新后用户界面中的原始语种字段与旧原始语种字段表中的原始语种字段的差异,根据差异比较结果生成新原始语种字段表,并保存;根据差异比较结果生成差异表,并输出;
根据所述新原始语种字段表,经翻译后,生成各语种的新目标语种字段,写入新目标语种字段表,确定新目标语种字段中各语种的新目标语种字段的加载地址;根据用户确定的目标语种,根据该目标语种的新目标语种字段及其加载地址为所述全局字符串指针赋值。
为了实现对系统支持语种的更新,所述生成目标语种字段表之后,进一步包括:将所述目标语种字段表保存为旧目标语种字段表;
该方法进一步包括:在更新目标语种或目标语种字段时,更新所述保存的旧目标语种字段表,生成新目标语种字段表;确定新目标语种字段中各语种的新目标语种字段的加载地址;
根据用户确定的目标语种,根据该目标语种的新目标语种字段及其加载地址为所述全局字符串指针赋值。
与现有技术相比,本发明所提供的本发明支持多语用户界面的系统和方法,将用户界面中的原始语种字段替换为一个唯一的全局字符串指针,确定被替换的原始语种字段对应的各语种的目标语种字段及其加载地址。在切换时,直接将目标语种字段的加载地址赋值给全局字符串指针,全局字符串指针到相应的地址获取目标语种字段,无需检索过程,提高了支持多语用户界面系统的运行速度。
生成目标语种字段时,开发人员只需对原始语种字段进行翻译,不需要了解工程文件中全局字符串指针对应的语意。需要更新语种时,开发人员也可以直接更新旧目标语种字段表的内容,然后重新确定新的目标语种的加载地址,切换后,系统就可以使用更新后的目标语种字段了,从而降低了开发难度。如果目标语种字段表采用Excel表的形式,则更新过程更为直观和简单。
本发明的目标语种字段的长度为不定长,并根据各语种的目标语种字段的长度确定加载地址,相较于预先按照最长的字段申请内存资源的方法,本发明不会占用额外的存储空间,大大节省了内存资源。
在更新了工程文件后,本发明还可以利用旧工程文件对应的旧原始语种字段表与新工程文件中的原始语种字段比较,将新工程文件中的新增的原始语种字段追加在就旧原始语种字段表的最后,形成新原始语种字段表,再根据新原始语种字段表进行翻译、资源转换等后续操作,从而实现了支持多语用户界面系统的更新。进一步的,还可以将比较结果生成差异表,供开发人员使用。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明进一步详细说明。
本发明关键在于:将用户界面中的原始语种字段替换为全局字符串指针,确定被替换的原始语种字段对应的各语种的目标语种字段及其加载地址;用户确定目标语种,根据该目标语种的目标语种字段及其加载地址为全局字符串指针赋值,再刷新用户界面。
图1为本发明实施例支持多语用户界面的系统组成结构示意图。如图1所示,该系统包括更新处理子系统和切换控制子系统。
其中,更新处理子系统,用于将用户界面中的原始语种字段替换为全局字符串指针,确定被替换的原始语种字段对应的各语种的目标语种字段及其加载地址,并将全局字符串指针、各语种的目标语种字段及其加载地址发送给切换控制子系统。
切换控制子系统,接收更新处理子系统发送的全局字符串指针、各语种的目标语种字段及其加载地址;当接收到用户确定的目标语种时,根据该目标语种对应的目标语种字段及其加载地址为全局字符串指针赋值,刷新用户界面。
图2为本发明实施例支持多语用户界面的方法流程图。该方法包括以下步骤:
步骤201:将用户界面中的原始语种字段替换为全局字符串指针。
其中,用户界面中的原始语种字段是指用户界面的工程文件中的原始语种字段。原始语种是开发人员在设计开发用户界面的工程文件时所使用的语种,例如,中文。用户界面中与语种相关的字段被设置为一种固定语种的字段,即原始语种字段。
步骤202:确定被替换的原始语种字段对应的各语种的目标语种字段及其加载地址。
其中,目标语种是用户界面所支持的语种。目标语种字段,是根据用户界面中的原始语种字段确定的各目标语种的字段。例如,用户界面中的原始语种字段为“打开”,当用户界面支持的语种为中文和英文时,将“打开”翻译为英文的“Open”,得到各语种的目标语种字段包括中文的“打开”和英文的“Open”。各语种的目标语种字段的加载地址是用户界面的工程文件运行时,各语种的目标语种字段所保存的地址。
步骤203:用户确定目标语种,根据该目标语种的目标语种字段及其加载地址为全局字符串指针赋值,再刷新用户界面。
经刷新,全局字符串指针可以从其指向的加载地址中直接获取对应的目标语种字段。
图3为本发明另一实施例支持多语用户界面的系统组成结构示意图。如图3所示,与图1示出的支持多语用户界面的系统组成结构相同,该系统包括多语更新处理子系统和多语切换控制子系统。
其中,多语更新处理子系统具体包括查找替换单元301、翻译单元302和资源转换单元303。
查找替换单元301,用于将用户界面中的原始语种字段替换为全局字符串指针,将被替换的原始语种字段发送给翻译单元302;将全局字符串指针发送给切换控制子系统。
翻译单元302,用于按照用户界面支持的语种,根据接收自查找替换单元301的原始语种字段,翻译出各语种的目标语种字段,将翻译出的各语种的目标语种字段发送给资源转换单元303。
资源转换单元303,用于接收翻译单元302发送的各语种的目标语种字段,分别确定各语种的目标语种字段的加载地址,将各语种的目标语种字段及其加载地址发送给切换控制子系统。
切换控制子系统具体包括存储单元311、用户设置单元313、切换单元312和刷新单元314。
其中,存储单元311,用于接收资源转换单元303发送的各语种的目标语种字段及其加载地址;按照接收的加载地址保存各语种的目标语种字段;向切换单元312返回用户确定目标语种对应的目标语种字段的加载地址。
用户设置单元313是用户接口,用于接收用户确定的目标语种,再发送给切换单元312。
切换单元312,用于根据用户设置单元313发来的用户确定的目标语种,从存储单元311获取该目标语种对应的目标语种字段的加载地址,为接收自查找替换单元301的全局字符串指针赋值,然后向刷新单元314发送刷新命令。
刷新单元314,用于根据接收自切换单元312的刷新命令,刷新用户界面。
图4为本发明另一实施例支持多语用户界面的方法流程图。如图4所示,该方法包括以下步骤:
步骤401:将用户界面中的原始语种字段替换为全局字符串指针。
本步骤中,查找替换单元301将用户界面中的原始语种字段替换为全局字符串指针,将被替换的原始语种字段发送给翻译单元302;将全局字符串指针发送给切换控制子系统的切换单元312。
步骤402:按照用户界面支持的目标语种,根据原始语种字段翻译出各语种的目标语种字段。
本步骤中,翻译单元302按照多语用户界面支持的目标语种,根据接收自查找替换单元301的原始语种字段翻译出各语种的目标语种字段,将翻译出的各语种的目标语种字段发送给资源转换单元303。这里,翻译是指人工翻译。
步骤403:确定各语种的目标语种字段的加载地址。将各语种的目标语种字段载入其加载地址。
在确定加载地址之前,先获取预先设置的定址配置信息。该定址配置信息中包括起始地址,用于确定各语种的目标语种字段的存储区域。起始地址就是该存储区域的起始地址。确定目标语种字段的加载地址为:根据预先设置的起始地址和各语种的目标语种字段的长度,计算出各语种的目标语种字段的加载地址,将各语种的目标语种字段载入其加载地址。
由于目标语种字段的长度为不定长,因此针对每个目标语种字段的不同长度计算加载地址,而不指定目标语种字段的长度为定长,使得目标语种字段不占用额外的空间,能够节省占用的内存资源。
本步骤中,资源转换单元303接收各语种的目标语种字段,确定各语种的目标语种字段的加载地址,将各语种的目标语种字段及其加载地址发送给切换控制子系统的存储单元311。存储单元311按照接收的加载地址保存各语种的目标语种字段。
步骤404:根据用户确定的目标语种,将该目标语种的目标语种字段的加载地址赋值给全局字符串指针,并刷新用户界面。
本步骤中,用户设置单元313将用户确定的目标语种发送给切换单元312,切换单元312根据接收的目标语种,从存储单元311获取该目标语种的目标语种字段的加载地址,为接收自查找替换单元301的全局字符串指针赋值,然后向刷新单元314发送刷新命令,由刷新单元刷新用户界面。
在实际应用中,用户界面中会有多个不同语意的原始语种字段,因此必须保证代表相同语意的全局字符串指针、原始语种字段、各语种的目标语种字段及其加载地址之间的对应关系。
为了增加切换语种的速度,使得本发明在为全局字符串指针赋值时,不需要通过检索查找全局字符串指针的对应关系。本发明实施例在将原始语种字段替换为全局字符串指针时,按替换顺序记录下被替换的原始语种字段,并顺序编号,还要过滤掉重复的原始语种字段;经翻译后生成了目标语种字段,该目标语种字段的加载地址也是按替换顺序记录。因此,在为全局字符串指针赋值时,直接将按替换顺序记录的目标语种字段的加载地址赋值给同样顺序的全局字符串指针,经刷新后,全局字符串指针指向加载地址,并采用加载地址上存储的目标语种字段替换切换前的语种字段,完成切换,并且无需检索过程,从而提高了整个支持多语用户界面系统的运行速度。
下面举较佳实施例对本发明支持多语用户界面的系统和方法进行更为细致和具体的说明。
第一较佳实施例
为了按顺序记录原始语种字段,本发明将被替换的原始语种字段按替换顺序记录在原始语种字段表中,经翻译,将翻译出的目标语种字段加入原始语种字段表,生成目标语种字段表,然后根据目标语种字段表进行后续操作。目标语种字段表中,不同语种、相同语意的目标语种字段对应记录;不同语意的目标语种字段仍然按照替换顺序排列。
其中,原始语种字段表和目标语种字段表可以是Excel表、TXT文件等,Excel表是微软公司提供的表格处理软件,以表格形式记录信息,因此可以比较简单将不同语种、相同语意目标语种字段排列为同一行/列,有利于字段比较或修改时的操作。
本实施例中,全局字符串指针采用数组指针,数据指针的下标表示替换顺序。原始语种字段表和目标语种字段表采用Excel表,为了区分,将原始语种字段表称为初始翻译Excel表,将目标语种字段表称为翻译后Excel表。
另外,本实施例将各语种的目标语种字段及其加载地址记录在目标多语言资源文件中,该目标多语言资源文件还可以包括一些配置信息。
图5为本发明第一较佳实施例支持多语用户界面的系统组成结构示意图。如图5所示,该系统包括更新处理子系统和切换控制子系统。
切换控制子系统包括查找替换单元510、翻译单元520和资源转换单元530。切换控制子系统的组成结构和功能与图3示出的切换控制子系统相同。
其中,查找替换单元510具体包括替换模块512和原始语种字段表生成模块513。
其中,替换模块512,用于将用户界面中的原始语种字段替换为全局字符串指针,将过滤掉重复字段的、被替换的原始语种字段按替换顺序发送给原始语种字段表生成模块513;将全局字符串指针按替换顺序发送给切换控制子系统的切换单元312。
在实际替换时,实际替换的对象为用户界面的工程文件,一个工程文件中可能包括多个文件,例如后缀为.h的文件,后缀为.res的文件,这两个文件中都可能包括要替换的原始语种字段,因此需要对这两个文件逐一处理,在处理时,两文件中相同的原始语种字段采用同样的全局字符串指针替换,保证生成的初始翻译Excel表中没有重复的字段,使得经翻译后,生成翻译后Excel表中的目标语种字段没有重复,进一步使得系统存储的字段减少,节省系统内存空间。因此在替换完成后时,替换模块应该将过滤掉重复字段的原始语种字段发送给原始语种字段表生成模块513。
为了过滤掉重复字段,查找替换单元510进一步包括与替换模块512相连的替换表511。该替换表511用于记录过滤掉重复字段的原始语种字段及其编码。这个替换表511是动态生成的,在替换开始之前将替换表511清空;或者在替换完毕后,将替换表清空。或者也可以在替换开始前建立该替换表511,在替换完成时删除该替换表511。
替换模块512在进行所述替换时,将替换表511清空,设置一个替换计数器,并将其计数值清零,然后逐一处理原始语种字段;处理原始语种字段A时,先查找替换表511,判断替换表511中是否存在原始语种字段A;如果替换表511中不存在原始语种字段A,则采用以替换计数器的值作为下标的数组指针替换并注释掉原始语种字段A,并将原始语种字段A追加在替换表511的最后,编号为替换计数器的值,将替换计数器的值加一;否则,从替换表中获取原始语种字段A的编号,采用以获取的编号作为下标的数组指针替换并注释掉原始语种字段A,然后处理下一个原始语种字段。
在所有原始语种字段处理完毕后,将替换表511中的原始语种字段按编号顺序发送给原始语种字段表生成模块513。则原始语种字段表生成模块513将接收到按替换顺序排列的过滤掉重复字段的原始语种字段。
原始语种字段表生成模块513,接收替换模块512发送的原始语种字段,按同样顺序写入初始翻译Excel表,将初始翻译Excel表发送给翻译单元520。生成初始翻译Excel表时,将按替换顺序排列的原始语种字段导入初始翻译Excel表中的一列。
相应的,翻译单元520接收的是初始翻译Excel表,根据该Excel表中的原始语种字段翻译出各语种的目标语种字段后,按照初始翻译Excel存储数据的顺序,将翻译后的各语种的目标语种字段写入初始翻译Excel表,形成翻译后Excel表,发送给资源转换单元303。在存储时,将不同语种、相同语意的目标语种字段存储为Excel表的一行,将相同语种、不同语意的目标语种字段存储为Excel表的一列,该列的存储顺序为前述替换顺序。
资源转换单元530包括定址配置信息存储模块532和转换模块531。
其中,定址配置信息存储模块532,用于存储目标多语资源文件的定址配置信息。定址配置信息包括加载起始地址,该加载起始地址用于确定各语种的目标语种字段的存储区域。
转换模块531,用于接收翻译单元302发送的各语种的目标语种字段,这里是翻译后Excel表;从定址配置信息存储模块532中获取预先设置的定址配置信息,根据获取的定址配置信息中的加载起始地址、各语种的目标语种字段的长度,计算出各语种的目标语种字段的加载地址。然后,将各语种的目标语种字段及其加载地址发送给存储单元311。本实施例根据定址配置信息、目标语种字段及其加载地址生成预定格式的目标多语资源文件发送给存储单元311。
图6为本发明第一较佳实施例支持多语用户界面的方法流程图。该方法采用图5示出的本发明第一较佳实施例支持多语用户界面的系统,该方法包括以下步骤:
步骤601:查找替换单元510在工程路径下遍历目录,找到符合替换条件文件。
本步骤中,符合替换条件的文件包括头文件和界面资源文件。头文件的后缀为.h,界面资源文件的后缀为.res。则在遍历目录时,查找后缀为.h或.res的文件。
步骤602:判断是否查找到符合替换条件的文件。如果是则执行步骤603;否则结束本流程。
步骤603:从查找到的符合替换条件的文件中搜索出采用宏定义的原始语种字段。通常,在后缀为.h或.res的文件中都采用宏定义将程序中的字符串及其赋值联系起来。
步骤604:用全局字符串数组指针替换宏定义中的原始语种字段,并采用替换顺序作为全局字符串指针数组的下标,将原始语种字段过滤掉重复字段后,按照查找替换顺序导出到Excel表中的一列,生成初始翻译Excel文件,发送给翻译单元520。
如果在步骤602中查找到多个符合条件的文件,则重复执行步骤603和604,将这多个符合条件的文件中的原始语种字段全部替换为全局字符串数组指针,并且相同原始语种字段采用相同的全局字符串数组指针替换。
本实施例中,假设工程文件的头文件为npd.gui.h,为了区别替换前后的不同,假设替换后的头文件命名为npd_gui_new.h,经步骤604的替换前后该头文件的部分内容的对比结果参见表1。
npd.gui.h文件内容 |
npd_gui_new.h文件内容 |
#define STR_OPEN “打开”; |
#define STR_OPEN UI_STRING[0];/*打开*/ |
#define STR_CLOSE “关闭”; |
#define STR_CLOSE UI_STRING[1];/*关闭*/ |
#define STR_DELETE“删除”; |
#define STR_DELETE UI_STRING[2];/*删除*/ |
#define STR_OPEN2“打开”; |
#define STR_OPEN2 UI_STRING[0];/*打开*/ |
表1
步骤605:翻译单元520将初始翻译Excel文件中的原始语种字段翻译为各语种的目标语种字段,生成翻译后Excel表,发送给资源转换单元530。
表2为翻译后Excel表的一个示例。如表2所示,其中编号为0的一列为初始翻译Excel文件的一列内容。与表1中示出的npd_gui_new.h文件部分内容相比,初始翻译Excel文件将重复的字段“打开”过滤,记录为一个字段,其所在位置按照该字段第一次出现的顺序记录。
|
0 |
1 |
2 |
ID |
中文 |
英文 |
日文 |
0000 |
打开 |
Open |
... |
0001 |
关闭 |
Close |
... |
0002 |
删除 |
Delete |
... |
... |
... |
... |
... |
表2
其中,初始翻译Excel表和翻译后Excel表采用Unicode编码。
步骤606:资源转换单元530根据翻译后Excel表存储的各语种的目标语种字段的长度,以及其存储的定址配置信息,计算出目标语种字段的加载地址,再根据定址配置信息、目标语种字段及其加载地址生成目标多语资源文件,发送给存储单元311。
其中,目标多语资源文件的编码采用支持多语用户界面系统所在产品设备的内码。定址配置信息中包括预先设置的目标多语资源文件的文件起始地址,根据该文件起始地址,获得各语种的目标语种字段的存储区域的加载起始地址,再根据该加载起始地址计算目标语种字段的加载地址。当然也可以直接将加载起始地址直接设置在定址配置信息中。
例如,加载起始地址地址为A,将A作为目标语种字段“打开”的载入地址,计算“关闭”的载入地址为B,“删除”的载入地址为C。其中,B是根据A加上“关闭”字段的长度获得的,C是根据B加上“删除”字段的长度获得的,以此类推。
“Open”的载入地址为A1,“Close”的载入地址为B1,“Delete”的载入地址为C1。其中,A1是根据中文字段最后一个字段的地址加上“Open”字段的长度获得的,B1是根据A1加上“Close”字段的长度获得的,以此类推。在这种情况下,中文和英文字段的具体内容是在地址空间中连续加载的,而且根据各字段的不同,占用的地址空间也不同。英文第一个字段可以紧接着中文最后一个字段存储,也可以根据定址配置信息中对英文字段存储位置的指定,计算英文第一个字段的加载地址。
但是在将目标语种字段的加载地址写入目标多语资源文件时,必须以语种为单位存储。每个语种对应的目标多语字段的载入地址按照前述替换顺序排列。这是为了在为全局字符串数组指针赋值时,保证其对应关系不变。
步骤607:存储单元520根据目标多语资源文件存储的加载地址存储目标语种字段。
步骤608:用户通过用户设置单元313选择目标语种发送给切换单元312,切换单元312从存储单元311存储的目标多语资源文件中获取该目标语种的目标多语字段的加载地址,按顺序赋值给全局字符串数组指针。
本步骤中,假设用户选择中文,则切换单元312获取该目标语种对应的加载地址,依次将A1、B1和C1按顺序赋值给UI_STRING[0]、UI_STRING[1]和UI_STRING[2]。
步骤609:刷新用户界面。本流程结束。
本步骤执行后,用户可以获得英文的用户界面。
当用户需要切换用户界面时,只需要执行步骤608和609,即可获得完成用户界面的切换。在切换过程中,假设用户选择目标语种为中文,则切换单元312将目标多语资源文件中的加载地址A、B和C按顺序赋值给UI_STRING[0]、UI_STRING[1]和UI_STRING[2],刷新用户界面后,用户就获得了中文的用户界面。可见,本发明多语支持用户界面在切换语种时,只需将目标多语资源文件中存储的加载地址按照其存储的顺序,依次赋值给全局字符串数组指针即可。不用进行检索,速度快。
下面对图6中的步骤604的替换过程,和步骤606中目标多语资源文件的生成过程进行详细介绍。
图7为图6中步骤604将原始语种字段替换为全局字符串数组指针的方法流程图。
步骤6041:设置替换计数器计数为零。
本步骤中,如果在步骤602中查找到多个符合条件的文件,则在逐一处理文件时,只在处理第一个符合条件的文件时执行步骤6041,在替换模块512中设置替换计数器,并为替换计数器设置初始值为零,因为本发明采用替换计数器记录替换顺序,对一个工程中的所有符合条件的文件替换完毕后才将计数器清零。
步骤6042:判断替换表511中是否存在要替换的原始语种字段。如果是,则执行步骤6048和6045,否则,执行步骤6043。
步骤6043:用以替换计数器的值作为下标的全局字符串数组指针替换宏定义中的当前原始语种字段,并注释掉当前原始语种字段。
本实施例的替换表511包括编号项和原始语种字段项。编号项记录了原始语种字段的替换顺序。表3为替换表的一个实例。
编号 |
原始语种字段 |
0 |
打开 |
1 |
关闭 |
2 |
删除 |
... |
... |
表3
步骤6044:替换计数器加一。将当前原始语种字段追加到替换表511的最后,编号为替换计数器的计数值。
步骤6045:判断是否处理完当前文件的所有原始语种字段。如果是,则执行步骤605;否则,执行步骤6047,然后返回步骤6042。
步骤6046:将替换表511记录的各原始语种字段,按编号顺序导出到Excel表中的一列,生成初始翻译Excel文件,发送给翻译单元520。此时,替换表511中即为过滤掉重复字段的原始语种字段。
步骤6047:处理下一个原始语种字段。
步骤6048:从替换表511中获取当前原始语种字段的编号,采用以获取的编号作为下标的全局字符串数组指针替换宏定义中的当前原始语种字段,并注释掉当前原始语种字段。然后执行步骤6045。
本步骤中,假设当前处理的宏定义为表1中的“#define STR_OPEN2打开”,则当前原始语种字段为“打开”,表3示出的替换表中有“打开”字段,则采用“打开”字段的编号作为全局字符串数组指针的下标,将“打开”替换为UI_STRING[0],并注释掉“打开”,生成新的宏定义行,即“#defineSTR_OPEN2 UI_STRING[0];/*打开*/”。
下面对步骤606生成目标多语资源文件的具体过程进行介绍。生成目标多语资源文件的单元为资源转换单元530。首先对目标多语资源文件的格式和内容进行介绍。表4为本实施例中目标多语资源文件的组成和内容定义。如表4所示,该目标多语资源文件包括文件头、字段索引区和字段内容数据区。其中,文件头存储一些配置信息,字段索引区存储各语种的目标语种字段的加载地址,字段内容数据区按照存储规则存储各语种的目标语种字段的具体内容。
内容 |
长度(bytes) |
文件头 |
128 |
字段索引区 |
定长,长度=全局字符串指针长度(pointerSize)×系统规划词条个数(StringNo)×语种数(languageNo),其中,同一词条可以对应多个语意相同的各语种的目标语种字段 |
字段内容数据区 |
Max.blockSize,字段内容数据区长度=目标语种字段的长度总和+预留地址长度 |
表4
图8为图6中步骤606生成目标多语资源文件的方法流程图。如图8所示该方法包括以下步骤:
步骤6061:转换模块531从定址配置信息存储模块532中获取目标多语资源文件的定址配置信息。
其中,定址配置信息包括以下内容:
1.翻译后的excel表的路径和文件名:支持相对路径和绝对路径;
2.目标多语资源文件的输出路径和文件名:同样支持指定的相对路径和绝对路径;
3.目标环境的全局字符串指针长度(单位:bytes);
4.系统规划允许最多词条数:同一词条对应语意相同的各语种的目标语种字段。
5.目标多语资源文件的文件起始地址:在系统中为目标多语资源文件分配的内存块的起始地址;
6.目标多语资源文件所占内存块长度:在系统中为目标多语资源文件分配的内存块的大小;
7.产品字串:相关的产品信息,例如产品型号。
步骤6062:根据翻译后Excel表中目标多语字段的列数获取当前多语系统支持语种数。
例如,采用表2示出的翻译后Excel表,得到目标多语字段的列数为3。
步骤6063:根据获取的定址配置信息和语种数生成目标多语资源文件的文件头。表5为文件头的格式和内容定义。文件头存储目标多语资源文件的定址配置信息、生成信息等。
字段名称 |
长度(Bytes) |
说明 |
数据供应商ID |
4 |
例如:SN+0x20(空格)\n |
数据类型ID |
2 |
例如:数据类型ID为0x00C0,代表字符串string |
工具版本号 |
2 |
如V2.1表示为(2<<8+1) |
文件生成日期/时间 |
18 |
YYYY-MM-DD HH:MM |
语种数 |
1 |
来源于输入翻译后Excel表中的字段的有效列数 |
全局字符串指针长度 |
1 |
来源于定址配置信息 |
允许词条总个数 |
2 |
来源于定址配置信息 |
目标多语资源文件的文件起始地址 |
4 |
来源于定址配置信息 |
保留扩展区 |
xx |
用0xFF填充 |
产品字串 |
48 |
来源于定址配置信息,如A2008,不足16byte用0x00 |
表5
步骤6064:将从翻译后Excel表获取的各语种的目标语种字段,根据字段存储规则,存入目标多语资源文件的字段内容数据区。
其中,目标语种字段在目标多语资源文件中的存储规则是各语种的目标语种字段存储在目标多语资源文件中字段内容数据区的存储顺序。字段内容数据区中相同的各目标语种字段,其存储顺序不同,计算出的加载地址也不同。
本实施例中,字段内容数据区存储各语种的目标语种字段。其存储规则为:以词条为单位分类存储,每个词条都对应各语种的目标语种字段。表6为字段内容数据区的格式和内容定义。
第一个词条内容:(第一语种字段、第二语种字段、......、第N语种字段)例如:“打开”、“Open”、...... |
第二个词条内容:(第一语种字段、第二语种字段、......、第N语种字段)例如:“关闭”、“Close”、...... |
第三个词条内容:(第一语种字段、第二语种字段、......、第N语种字段)例如:“删除”、“Delete”、...... |
...... |
第M个词条内容: |
(第一语种字段、第二语种字段、......、第N语种字段) |
(保留填充区:不足词条数地址用0x00填充) |
表6
步骤6065:根据定址配置信息中的文件起始地址、翻译后Excel表中各目标语种字段的长度和目标语种字段在目标多语资源文件中的存储规则,获得各语种的索引表,形成目标多语资源文件的字段索引区。
在计算时,先根据文件起始地址计算目标语种字段的加载起始地址,即字段内容数据区的起始地址。字段索引区的总长度一般是固定的,可以采用全局字符串指针长度乘以系统规划词条数再乘以语种个数计算得到。然后将文件起始地址加文件头长度加字段索引取长度,得到目标语种字段的加载起始地址。然后再根据该加载起始地址、目标语种字段的长度和目标语种字段的存储规则计算各语种的目标语种字段的加载地址,得到各语种的索引表。
字段索引区存储各语种的目标语种字段的加载地址。表7为字段索引区的格式和内容定义。如表7所示,本实施例以语种为单位分类存储加载地址,具体为:字段索引区存储各语种的索引表,每个索引表按确定顺序存储该语种各字段的加载地址。其中,上述确定顺序为替换时的替换顺序。
第一语种字段索引表:(第一字段地址、第二字段地址、......、第M字段地址,不足词条数用0x00填充)例如,“打开”的地址A、“关闭”地址B、“删除”的地址C...... |
第二语种字段索引表:(第一字段地址、第二字段地址、......、第M字段地址,不足词条数用0x00填充)例如,“Open”的地址A1、“Close”地址B1、“Delete”的地址C1...... |
......... |
第N语种字段索引表:(第一字段地址、第二字段地址、......、第M字段地址,不足词条数用0x00填充) |
表7
步骤6066:按顺序将文件头、索引区和数据区的数据信息输出至文件,生成目标多语资源文件,发送给存储单元311。至此,完成了目标多语资源文件的生成。
存储单元311在接收到目标多语言资源文件后,根据文件头中的文件起始地址将目标多语资源文件存入相应的存储区域,则目标多语字段文件中的目标语种字段就按照载入地址存入了相应的地址。图9为本发明目标多语资源文件的存储格式示意图,如图9所示,本实施例中,目标多语资源文件的起始地址为0X0000,文件头为128字节,则字段索引区的起始地址为0X0000+128;索引区中中文、英文、日文的索引表起始地址分别为0X0000+128、0X0000+aaa、0X0000+bbb。数据区中各语种的目标语种字段按照字段索引区存储的加载地址存储。
其中,每个语种索引表的长度可以是一定的,例如索引表的定长为系统规划的最多词条数乘以全局字符串指针长度。则,aaa=128+索引表的定长;bbb=aaa+索引表的定长。每个语种索引表的长度也可以是不定长的,根据当前系统词条的多少变化。
在切换语种时,首先,进行指针初始化,将先全局字符串指针指向目标多语言资源文件的文件起始地址,如0X0000;然后,根据目标语种找到对应索引表,将全局字符串数组指针指向该索引表的起始地址。例如目标语种为中文,则中文索引表起始地址为0X0000+128,将全局字符串数组指针指向0X0000+128,则数组指针被赋值。在索引表为定长的情况下,切换单元312可以根据目标语种和文件起始地址计算出目标语种的索引表起始地址。在索引表不为定长情况下,目标多语资源文件的文件头可以保存语种与索引表起始地址的对应关系,切换单元312根据文件头获取目标语种的索引表起始地址。
采用本实施例的支持多语用户界面的系统还能够方便的实现更新支持的语种,包括增加、删除、修改支持的语种,以及增加、删除、修改用户界面中原始语种字段。
在增加、删除、修改语种时,可以按照图6所述的方法重新生成新的目标多语资源文件,并存储在存储单元311中,则切换单元312就可以使用增加、删除、修改语种后的用户界面了。
为了减化更新过程,本发明还提供了另一种更新方式。如图5所示,本发明可以在更新处理子系统中增加了与翻译单元520相连的目标语种字段表存储单元540。
该目标语种字段表存储单元540,将接收翻译单元520生成的翻译后Excel表,并存储为旧翻译后Excel表。
翻译单元520进一步用于,在生成翻译后Excel表后,发送给目标语种字段表存储单元540。当需要增加、删除、修改语种时,翻译单元520从目标语种字段表存储单元540获取上次生成的旧翻译后Excel表,对该Excel表内容进行相应修改。例如,增加一种语种时,在Excel表中增加一列;删除一种语种时,删除该语种对应一列;修改语种的某些字段翻译时,对这些字段进行修改;然后将处理完毕的新翻译后Excel表再次存储到目标语种字段表存储单元540,同时发送给资源转换单元530。
资源转换单元530根据新翻译后Excel表和其存储的定址配置信息生成新目标多语资源文件,存储到存储单元311,则切换单元312就可以使用增加、删除、修改语种后的用户界面了。这种方式十分简单、方便,减小了开发难度和重复程度,而且在对翻译后Excel表的内容进行修改时,开发人员不需知道工程文件中全局字符串指针所代表字段的语意,只要将翻译后Excel表中需要修改的目标语种字段进行修改即可。
本实施例中在生成目标多语资源文件时,需要先获取定址配置信息,根据定址配置信息中的文件起始地址,确定在目标环境中目标多语资源文件的存储区域,以及各语种的目标语种字段的加载地址。但是有些目标环境不方便预先确定目标多语资源文件的文件起始地址,则需要采用动态申请空间的方式,先申请目标多语资源文件大小的空间,然后将其加载到申请的内容空间中。其具体处理方法为:
在生成目标多语资源文件时,采用定址配置信息的文件起始地址确定各语种的目标语种字段的加载地址。
在存储模块311存储目标多语资源文件时,动态申请保存目标多语资源文件的实际文件起始地址,将目标多语资源文件保存在实际文件起始地址开始存储区域中,计算实际文件起始地址和预先设置的文件起始地址的差值。例如,目标多语资源文件的预先设置的文件起始地址为0x0000,动态申请的文件起始地址为0x0000+1000,差值为1000。这个差值也是各语种的目标语种字段实际存储区域的实际加载起始地址与已确定的加载起始地址的差值;也是各语种的目标语种字段的实际加载地址与已确定的加载地址的差值。
在为全局字符串指针赋值时,要考虑上述差值,将已确定的目标语种字段的加载地址加上该差值后,作为目标语种字段的实际加载地址,向全局字符串指针赋值。例如,采用定址时,如果中文索引表的起始地址为0X0000+128;则在动态申请起始地址情况下,差值为1000时,中文索引表的起始地址为0X0000+128+1000。
第二较佳实施例
与第一较佳实施例相比,本实施例在图2示出的更新处理子系统中增加了资源比较功能,用于比较旧用户界面的工程文件和更新后用户界面的工程文件中原始语种字段的差异。
图10为本发明第二较佳实施例支持多语用户界面的系统组成结构示意图。该系统包括更新处理子系统和切换控制子系统。
其中,切换控制子系统的组成结构与图5示出的切换控制子系统的组成结构相同。
更新处理子系统包括查找替换单元1001、翻译单元1002、资源转换单元1003、原始语种字段表存储单元1005、资源比较单元1006和差异生成单元1007。
其中,翻译单元1002、资源转换单元1003与第一较佳实施例中的同名单元功能相同。查找替换单元1001的组成结构与第一较佳实施例中查找替换单元510的组成结构相同,不同之处在于,该查找替换单元1001进一步用于在向翻译单元1002发送原始语种字段表时,同时发送给原始语种字段表存储单元1005。
原始语种字段表存储单元1005,用于将接收自查找替换单元1001的原始语种字段表存储为旧原始语种字段表,将接收自资源比较单元1006的新原始语种字段表存储为新原始语种字段表。该新原始语种字段表在更新后用户界面工程文件再次被更新后,就成为第二次更新后用户界面的旧原始语种字段表。
资源比较单元1005从原始语种字段表存储单元1005中获取旧原始语种字段表;比较更新后用户界面的原始语种字段与旧原始语种字段表中的原始语种字段的差异,将更新后用户界面中与旧原始语种字段表内容重复的原始语种字段替换为旧全局字符串指针;将新增的新原始语种字段替换为新全局字符串指针,并将该新原始语种字段追加在旧原始语种字段表的最后,生成新原始语种字段表,再发送给原始语种字段表存储单元1005和翻译单元1002。
该资源比较单元1006,还将差异比较结果发送给差异生成单元1007。
差异生成单元1007,用于将接收自资源比较单元1006的差异比较结果,生成差异表输出;如果不需要输出差异表,则该更新处理子系统可以不包括该差异生成单元1007。
本实施例中,资源比较单元1006生成的新原始语种字段表将新增的原始语种字段追加到旧原始语种字段表最后,同时无需删除已有字段,从而能够防止全局字符串指针指向地址的错位。
如图10所示,该更新处理子系统还可以进一步包括与资源比较单元1006相连的资源比较配置单元1008。资源比较配置单元1008用于存储资源比较配置信息。资源比较单元1006在进行比较差异之前,从资源比较配置单元1008获取资源比较配置信息。表8为资源比较配置信息的内容。资源比较单元1006根据获取的资源比较配置信息,确定要处理的更新后用户界面的工程文件所在路径,和/或要获取的旧原始语种字段表的存储路径,和/或要保存的新原始语种字段表的存储路径,和/或要输出的差异表的存储路径。
关键字 |
说明 |
File |
旧原始语种字段表的存储路径 |
Dir |
更新后用户界面的工程文件所在路径 |
Outdifferfile |
输出差异表的路径 |
Outranslatefile |
生成的新原始语种字段表的存储路径 |
表8
图11为本发明第二较佳实施例更新目标多语资源文件的方法流程图。该方法采用图10示出的更新处理子系统执行更新操作,原始语种字段表和目标语种字段表为Excel表。该方法包括以下步骤:
步骤1101:资源比较单元1006根据指定路径获取符合替换条件的工程文件。
本步骤中,指定路径可以由开发人员指定。如果该资源比较单元包括资源比较配置单元1008,则也可以从资源比较配置单元1008中获取Dir作为指定路径。
通常,开发人员一般是对原用户界面的工程文件进行更新,而不是对替换后的用户界面的工程文件进行更新。因此,本步骤获取的更新后用户界面的工程文件中不包含全局字符串指针。
步骤1102:资源比较单元1006从原始语种字段表存储单元1005中获取该工程文件的旧初始翻译Excel表。
其中,原始语种字段表存储单元1005存储有查找替换单元1001根据更新前用户界面的工程文件生成的旧初始翻译Excel表。
步骤1103:资源比较单元1006处理工程文件中的当前原始语种字段,判断旧初始翻译Excel表中是否存在要替换的当前原始语种字段,如果是,则执行步骤1104;否则,执行步骤1111。
步骤1104:采用旧全局字符串指针替换当前原始语种字段,并注释掉当前原始语种字段。
本实施例中,初始翻译Excel表包括编号项和原始语种字段项。本步骤中,从旧初始翻译Excel表中获取当前原始语种字段的编号,将该原始语种字段替换为以该编号作为下标的数组指针。
步骤1105:是否处理完工程文件的所有原始语种字段。如果是,则执行步骤1106,否则执行步骤1107。
步骤1106:处理工程文件中下一个原始语种字段;返回步骤1103。
步骤1107:资源比较单元1006将旧初始翻译Excel表中未比较过的原始语种字段,作为差异字段输出给差异生成单元1007。
判断旧初始翻译Excel表中是否有未比较过的原始语种字段方法可以为:在步骤1104进行替换后,将旧初始翻译Excel表中比较过的原始语种字段标记为已处理。则本步骤将未标记的原始语种字段输出给差异生成单元1007。这部分差异是工程文件相较于旧工程文件删除的原始语种字段。
步骤1108:差异生成单元1007根据接收的差异字段输出差异表;资源比较单元1006将新初始翻译Excel表存储在原始语种字段表存储单元1005中,并输出给翻译单元1002。
步骤1109:翻译单元302根据支持语种,将新初始翻译Excel表中的原始语种字段翻译为各语种的目标语种字段,生成新翻译后Excel表,发送给资源转换单元1003。
步骤1110:资源转换单元1003根据新翻译后Excel表以及定址配置信息生成新目标多语资源文件,发送给存储单元311。至此,本流程结束。
步骤1111:采用新全局字符串指针替换工程文件中当前原始语种字段,注释掉当前原始语种字段。
本步骤中,将该原始语种字段替换为以新编号作为下标的数组指针。新编号是当前初始翻译Excel表中最大编号加一得到的。
步骤1112:将被注释掉的原始语种字段追加到旧初始翻译Excel表的最后,形成新初始翻译Excel表。并将被注释掉的原始语种字段作为差异字段输出给差异生成单元。这部分差异是工程文件相较于旧工程文件添加的原始语种字段。然后执行步骤1105。
本步骤中,将被注释掉的原始语种字段及其新编号追加到旧初始翻译Excel表的最后。
以上就是更新目标多语资源文件的方法流程。切换控制单元运行更新后用户界面的工程文件后,就可以根据更新后的目标多语资源文件切换语种,获得所需语种的用户界面了。
本实施例中更新后用户界面的工程文件不包括全局字符串指针。在实际应用中,更新后用户界面的工程文件还可能是已经经过一次替换,并保留全局字符串指针的工程文件,该工程文件与语种相关的字段中,一部分为被替换后的全局字符串指针,另一部分为新增的原始语种字段。则,资源比较单元1006只需在获取旧初始翻译Excel表后,将工程文件中新增的原始语种字段替换为新全局字符串指针,并将被替换的原始语种字段追加到旧初始翻译Excel表的最后,生成新初始翻译Excel表,经保存后发送给翻译单元1002。经过翻译单元1002和资源转换单元1003的处理,就生成了更新后的新目标语种资源文件。
本发明还可以将资源比较的功能合并在查找替换单元1001中,在查找替换单元1001中增加存储旧初始翻译Excel表的模块,在查找替换单元1001中的替换模块增加比较差异的功能。
综上所述,本发明支持多语用户界面的系统和方法能够提高了支持多语用户界面系统的运行速度,语种切换速度;节省内存资源;降低开发难度。另外,本发明的技术方案还不限制开发语言,采用C、JAVA、汇编进行开发均可以达到所需效果。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。