一种用于解决计算机软件多语言支持问题的方法和系统的制作方法

文档序号:6611466阅读:456来源:国知局
专利名称:一种用于解决计算机软件多语言支持问题的方法和系统的制作方法
技术领域
本发明涉及计算机软件领域,特别是涉及一种用于解决计算机软件界面多语言支持问题的方法和系统。
背景技术
在目前软件国际化的情况下,多语言支持问题越来越突出,所谓的多语言支持,一般是指同一套软件代码,运行在不同语言的操作系统环境下,可以显示出不同的界面;从而越来越多的涉及到文本转换的问题,例如,对于中国软件技术人员开发的软件,经常出现需要将中文的文本翻译成其他语言的文字来展示的情况。而由于目前的开发工具大都使用的是英文,并且很多软件的前期版本的源代码中混杂了大量的中文信息。如何在不修改或少修改现有软件代码的情况下,在不同的语言环境下快速显示不同的文字信息是一个迫切需要本领域技术人员解决的技术问题。

发明内容
本发明所要解决的技术问题是提供一种用于解决计算机软件界面多语言支持问题的方法和系统,可以简单、方便的帮助现有的中文软件完成界面语言的转换,实现多语言支持。
为了解决上述问题,本发明公开了一种实现计算机软件多语言支持的方法,具体可以包括以下步骤提取源代码中的中文字符串,并在相关位置添加调用函数;针对所提取的各个中文字符串,采用哈希算法生成相应的哈希值;生成至少一个资源文件,所述资源文件中包括相应的哈希值以及转换后的文本串;当该应用程序执行时,通过调用函数获取相应的中文字符串,从资源文件中获取相应的转换后的文本串;在该应用程序界面显示所述转换后的文本串。
优选的,转换后文本串的一种语言形式对应生成一个或者多个资源文件。进一步,也可以该应用程序的一个或几个模块部分对应生成一个或者多个资源文件。
优选的,该方法还可以包括对从源代码中识别出的中文字符串进行筛选,符合预置条件的中文字符串才进行提取。
其中,可以通过以下方式获取转换后文本串直接依据所获取的中文字符串,从资源文件中匹配获取相应的转换后文本串;或者,先针对所获取的中文字符串计算得到哈希值,然后依据该哈希值从资源文件中匹配获取相应的转换后文本串。
优选的,该方法还可以包括当哈希值计算出现冲突时,在资源文件建立冲突区用于记录冲突信息;或者,当哈希值计算出现冲突时,采用另一哈希函数重新计算以获得没有冲突的哈希值。
根据本发明的另一优选实施例,还公开了一种实现计算机软件多语言支持的装置,具体可以包括以下模块资源文本提取模块,用于提取应用程序源代码中的中文字符串,并在相关位置添加统一的调用函数;该调用函数用于当该应用程序执行时传送相应的中文字符串;哈希值计算模块,用于针对各个中文字符串,采用哈希算法生成相应的哈希值;资源文件生成模块,用于生成至少一个资源文件,所述资源文件中包括相应的哈希值以及转换后的文本串;资源文本转换模块,用于依据调用函数发送的中文字符串,从资源文件中获取相应的转换后的文本串;并提供给该应用程序以完成界面显示。
优选的,转换后文本串的一种语言形式对应生成一个或者多个资源文件。进一步,也可以该应用程序的一个或几个模块部分对应生成一个或者多个资源文件。
进一步,所述的装置还可以包括筛选模块,用于对从源代码中识别出的中文字符串进行筛选,符合预置条件的中文字符串才进行提取。
优选的,所述资源文件还可以包括冲突区,所述冲突区用于记录当哈希值计算出现冲突时的相关信息。
进一步,所述的装置还可以包括第二哈希函数,用于当哈希值计算出现冲突时,采用该哈希函数重新计算以获得没有冲突的哈希值。
与现有技术相比,本发明具有以下优点首先,本发明直接基于中文文本,通过中文字符和英文字符在计算机中编码的不同,可以很方便的从源代码中提取出中文字符串来;进一步,本发明仅仅需要在源代码中的原中文字符串前统一添加调用函数即可,对源代码的改动极小;并且,不需要改动原有的中文字符串,所以不会影响该源代码原有的功能,也不影响原有源代码的可读性和易维护性。
其次,由于本发明采用哈希函数,直接依据中文文本生成唯一度很高的资源号,所以在软件开发和维护过程中都非常的简便易用,能够极大的节约修改源代码的成本、提高效率并降低出错概率。


图1是本发明一种实现计算机软件多语言支持的方法实施例的步骤流程图;图2是本发明一种实现计算机软件多语言支持的装置实施例的结构框图。
具体实施例方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。
本发明可用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
参照图1,示出了本发明一种实现计算机软件多语言支持的方法,包括步骤101、提取源代码中的中文字符串,并在相关位置添加调用函数;
本发明主要针对中文软件,即界面信息为中文的软件(应用程序),通过修改原软件版本以实现多语言支持的情况。针对源代码的处理完成之后,编译生成可执行代码即可。
由于在计算机底层编码中中文字符和英文字符的编码是不一样的中文字符的编码由两个字节组成,并且每个字节的高位都是1;而英文字母、数字包括基本符号等可输入字符其字节的高位都是0。因此,依据上述区别,就可以通过计算机自动遍历源代码中的所有字符或者指定范围的字符,通过简单的字节高位数值的判断,就可以识别出其中的中文字符串,能够极大地节约修改的成本并减小出错的可能性。当然,采用人工进行也完全可行。
优选的,由于本发明主要应用于软件的多语言处理中的,所以需要转换的中文字符串主要针对界面信息字符串(也称之为资源文本)的。但是实际上,源代码中的中文字符串并不一定都是资源文本,因此,还需要对从源代码中识别出的中文字符串进行筛选,符合预置条件的中文字符串才进行提取。所述筛选规则可以包括是否该中文字符串的前后具有引号,该代码是否属于非注释代码等等。当然,上述对筛选过程的独立描述仅仅是为了说明方便,实际上,筛选规则和提取过程完全可以有机的结合在一个步骤中完成。
进一步,为了实现源代码中的中文字符串和其他语言字符串的转换,需要在相关位置添加调用函数(该调用函数针对所有的资源文本都是统一的),以确保在其他语言环境下运行该应用程序时,能够准确显示转换后的字符串。例如,以前的代码是This.Text=“测试串”将被修改为This.Text=LoadKDString(“测试串”)在源代码中添加了调用函数之后,可以解决在其他语言环境下界面语言转换的问题,但是会影响该应用程序在中文语言环境下的运行,因为需要多执行一次函数调用。优选的,该调用函数在执行过程中,如果当前环境为中文环境,则不需要执行后续处理,直接返回相应的中文字符串即可;经过测试,对该应用程序在中文环境下的影响可以忽略不计。
实际上,本发明最大的一个特点就在于对原应用程序的改动最小(仅仅添加了一调用函数)、对原应用程序的运行效率损失最小(仍然包含有基准语言文本串,直接调用即可)。即,本发明直接使用中文文本作为索引关键字,建立哈希表形式的资源文件;在进行软件改造时,并不去掉原来散布在源代码中的中文文本信息,而是采用在中文文本串前加一个特定的转换函数的方法。
在本发明的一个优选实施例中,可以先用计算机工具提取中文文本串并添加调用函数,然后由人工进行检查,最后再通过测试校验以确定实现完全、准确的提取了资源文本。
步骤102、针对所提取的各个中文字符串,采用哈希算法生成相应的哈希值;所谓哈希算法将任意长度的二进制值映射为固定长度的较小二进制值的过程,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式;如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。即使用一个函数变换将一个大范围的数据映射到一个小的范围内并且冲突尽可能少,然后可以使用这个小范围内的值(也就是哈希值)作为关键字来进行快速查询。哈希函数是整个哈希算法中的关键点,好的哈希函数的标准应该是计算速度快,并且冲突较少。一般的,为了提高计算速度,尽量采用简单的加法、乘法等;为了减少重复的几率,则可以尽量采用奇数进行域范围扩展方式等等。
但是由于中文字符数量巨大,组合在一起的数量就更加巨大,因此,即使采用非常高效的哈希函数,也无法避免哈希值重复的情况出现(即冲突),解决冲突的处理方式也有很多,例如,一次哈希法专门建立一个顺序表用于保存冲突信息;或者,二次哈希法换一个哈希函数进行重新计算等等。
本发明采用哈希算法的好处在于,能够自动根据中文文本串生成资源编号,而且,该资源编号可以在一定程度上实现唯一性,从而不需要人工对资源编号进行干预,因此,在开发和维护的过程中,不需要开发人员在资源文本的编号上花费精力,简便易用,后续成本很低。并且,由于本发明能够自动根据中文文本串生成资源编号,因此,也不需要考虑是否需要在多个同类软件之间统一资源编号,或者如何保证在多个开发流程协同工作时维护统一、正确的资源编号等等降低开放效率、增加维护工作量的情况。
下面简单介绍一种本发明步骤102的优选实现过程,以一次哈希为例具体算法可以采用将传入中文字符串取定长,然后内码转换,取得码值后再进行域范围扩展而得到。测试证明,当资源里面的字符串数目超过3万条时,Hash冲突率为1.9%左右。对于冲突的数据,则按哈希码记录到冲突链表中,同时记录原值与转换后的值即可。
例如对于中文字符串“苏培华”,我们先取得它的内码值。苏的中文内码是CBD5,培的中文内码是E0C5,华的中文内码是AABB。在传入时一般会自动采用低位在前,高位在后的编码方式,则转换后的结果为“苏培华”→D5CBC5E0BBAA。
我们依次取其变换后的码值按照一定的规则进行计算,得到一个数值,即所需的哈希值。仍以上例示范“苏培华”→D5CBC5E0BBAA→445889即445889这个值就是原中文字符串“苏培华”的哈希值。
假设存在另一中文字符串“专利文件”,经过上述相同的哈希过程后,得到了同样的哈希值445889,则为了解决冲突,本发明在资源文件的后面较远的地方开辟一个区域,专门用于存放类似的存在冲突的字符串及其相关信息,同时还可以在原来记录字符串的位置上记录下冲突记录的存储首地址信息,以方便调用,如下表所示哈希区

冲突区

优选的,为了减小资源文件的大小,在哈希区中可以不存放中文字符串的原值,只有在冲突区中才存放中文字符串原值以用于冲突后的比较,例如,上表中的哈希区去除中文字符串一列。在没有冲突的情况下,程序会通过计算后的哈希值直接定位到相应的文件块中,读取转换后的串值返回,从而达到很高的效率。
在具体转换语言显示的过程中,也需要首先计算出哈希值,如果发现有冲突,则根据冲突的首地址找到该冲突值的第一个记录;上表中示出的情况中,冲突的首地址为“8888999”,其具有两条记录。确定了冲突区的记录后,从第一条记录开始,比较中文字符串的原值是否一致,如果一致,就直接返回对应的转换后字符串的值,否则依次往下查找下一条记录,直到找到或该值冲突区结束返回找不到。
实际上,上述过程仅仅是一个简单的线性查找过程,算法简单,但效率并不高。因此需要冲突较少时才能有较高的总体效率。当然,改进上述的查找过程也是有很多现有技术可以做到的,在此不再详述。
步骤103、生成至少一个资源文件,所述资源文件中包括相应的哈希值以及转换后的文本串;简单的资源文件可以包括上面描述的哈希区和冲突区即可,当然,还可以包括更多的辅助信息。资源文件中还可以包括中文字符串原值,优选的,如果选择的哈希算法足够好,或者资源的数量有限,资源文件中可以不包括中文字符串。
如果需要进行多种语言的翻译和转换,则可以生成一个资源文件中存储多种类型的转换后文本串;优选的,生成多个资源文件,即转换后文本串的一种语言形式就对应生成一个资源文件。例如,生成一中文繁体的资源文件、一英文的资源文件、一法文的资源文件等等。优选的,还可以将一个资源文件分为多个,以提高它的加载和处理速度,当然,这要视具体应用而定。
进一步,由于在实际的软件运行中,对于界面显示加载调用的速度要求非常高,优选的,针对一个软件的一个或几个模块部分建立相应的资源文件,以进一步减少冲突和提高调用速度。即使两个模块中的哈希值发生了冲突,但是由于模块的不同的调用的是不同的资源文件,所以冲突自然也就不存在了。
对于转换后字符串的获取,由于具体应用的多样复杂以及界面文本串的数量并不是很多,所以优选的,可以提供工具由专业人员人工添加即可。
步骤104、当该应用程序执行时,通过调用函数获取相应的中文字符串,从资源文件中获取相应的转换后的文本串;当该应用程序运行时,通过主程序读取相应的操作系统语言信息或者读取用户设置的语言显示选项,确定需要加载哪个资源文件。例如,如果确定为中文简体,则由于原界面语言就是中文简体,则直接调用源代码中的中文字符串即可,不需要调用资源文件;如果确定为英文,则调用英文资源文件即可。
具体从资源文件中获取相应的转换后的文本串的过程可以直接依据所获取的中文字符串,从资源文件中匹配获取相应的转换后文本串;或者,也可以先针对所获取的中文字符串计算得到哈希值,然后依据该哈希值从资源文件中匹配获取相应的转换后文本串。这两种方式都是可行的,具有各自的优缺点,本领域技术人员在实际应用中根据需要选用即可。
如果采用后一种方式,对于具体的哈希值计算过程,可以直接在添加的调用函数中完成计算,得到该中文字符串的哈希值,并以此为关键字在哈希表资源文件中查找对应的转换后文本串。
步骤105、返回相应的文本串,并在该应用程序界面显示所述转换后的文本串。
参照图2,示出了一种实现计算机软件多语言支持的装置实施例,包括资源文本提取模块201,用于提取应用程序源代码中的中文字符串,并在相关位置添加统一的调用函数;该调用函数用于当该应用程序执行时传送相应的中文字符串;哈希值计算模块202,用于针对各个中文字符串,采用哈希算法生成相应的哈希值;资源文件生成模块203,用于生成至少一个资源文件,所述资源文件中包括相应的哈希值以及转换后的文本串;优选的,针对转换后文本串的一种语言形式就对应生成一个或者多个资源文件;或者,针对该应用程序的一个或几个模块部分对应生成一个或者多个资源文件;
资源文本转换模块204,用于依据调用函数发送的中文字符串,从资源文件中获取相应的转换后的文本串;并提供给该应用程序以完成界面显示。对于具体的获取过程,资源文本转换模块204可以直接依据所获取的中文字符串,从资源文件中匹配获取相应的转换后文本串;或者,也可以先调用哈希值计算模块202针对所获取的中文字符串计算得到哈希值,然后依据该哈希值从资源文件中匹配获取相应的转换后文本串。
进一步,本实施例还可以包括筛选模块200,用于对从源代码中识别出的中文字符串进行筛选,符合预置条件的中文字符串才进行提取。
作为解决冲突的一种方式,所述资源文件还可以包括冲突区,所述冲突区用于记录当哈希值计算出现冲突时的相关信息。出现冲突时,到该冲突区查找获取相关记录即可。
作为解决冲突的另一种方式,本实施例还可以包括第二哈希函数(哈希值计算模块202通常采用的为第一哈希函数),用于当哈希值计算出现冲突时,采用该哈希函数重新计算以获得没有冲突的哈希值。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种实现计算机软件多语言支持的方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种实现计算机软件多语言支持的方法,其特征在于,包括提取源代码中的中文字符串,并在相关位置添加调用函数;针对所提取的各个中文字符串,采用哈希算法生成相应的哈希值;生成至少一个资源文件,所述资源文件中包括相应的哈希值以及转换后的文本串;当该应用程序执行时,通过调用函数获取相应的中文字符串,从资源文件中获取相应的转换后的文本串;在该应用程序界面显示所述转换后的文本串。
2.如权利要求1所述的方法,其特征在于转换后文本串的一种语言形式对应生成一个或者多个资源文件。
3.如权利要求1所述的方法,其特征在于该应用程序的一个或几个模块部分对应生成一个或者多个资源文件。
4.如权利要求1所述的方法,其特征在于,还包括对从源代码中识别出的中文字符串进行筛选,符合预置条件的中文字符串才进行提取。
5.如权利要求1所述的方法,其特征在于,直接依据所获取的中文字符串,从资源文件中匹配获取相应的转换后文本串;或者,先针对所获取的中文字符串计算得到哈希值,然后依据该哈希值从资源文件中匹配获取相应的转换后文本串。
6.如权利要求1所述的方法,其特征在于,还包括当哈希值计算出现冲突时,在资源文件建立冲突区用于记录冲突信息。
7.如权利要求1所述的方法,其特征在于,还包括当哈希值计算出现冲突时,采用另一哈希函数重新计算以获得没有冲突的哈希值。
8.一种实现计算机软件多语言支持的装置,其特征在于,包括资源文本提取模块,用于提取应用程序源代码中的中文字符串,并在相关位置添加统一的调用函数;该调用函数用于当该应用程序执行时传送相应的中文字符串;哈希值计算模块,用于针对各个中文字符串,采用哈希算法生成相应的哈希值;资源文件生成模块,用于生成至少一个资源文件,所述资源文件中包括相应的哈希值以及转换后的文本串;资源文本转换模块,用于依据调用函数发送的中文字符串,从资源文件中获取相应的转换后的文本串;并提供给该应用程序以完成界面显示。
9.如权利要求8所述的装置,其特征在于转换后文本串的一种语言形式对应生成一个或者多个资源文件。
10.如权利要求8所述的装置,其特征在于该应用程序的一个或几个模块部分对应生成一个或者多个资源文件。
11.如权利要求8所述的装置,其特征在于,还包括筛选模块,用于对从源代码中识别出的中文字符串进行筛选,符合预置条件的中文字符串才进行提取。
12.如权利要求8所述的装置,其特征在于,所述资源文件还包括冲突区,所述冲突区用于记录当哈希值计算出现冲突时的相关信息。
13.如权利要求8所述的装置,其特征在于,还包括第二哈希函数,用于当哈希值计算出现冲突时,采用该哈希函数重新计算以获得没有冲突的哈希值。
全文摘要
本发明提供了一种实现计算机软件多语言支持的方法和装置,该方法可以包括提取源代码中的中文字符串,并在相关位置添加调用函数;针对所提取的各个中文字符串,采用哈希算法生成相应的哈希值;生成至少一个资源文件,所述资源文件中包括相应的哈希值以及转换后的文本串;当该应用程序执行时,通过调用函数获取相应的中文字符串,从资源文件中获取相应的转换后的文本串;在该应用程序界面显示所述转换后的文本串。本发明直接使用中文文本作为索引关键字,建立哈希表形式的资源文件;从而实现对原应用程序的改动极小(仅仅添加了一调用函数)、对原应用程序的运行效率损失极小(仍然包含有基准语言文本串,直接调用即可)。
文档编号G06F17/30GK101093513SQ20071014046
公开日2007年12月26日 申请日期2007年8月14日 优先权日2007年8月14日
发明者徐英 申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1