本发明涉及计算机软件领域,尤其涉及一种基于多国语标签的原语言替换方法。
背景技术:
在目前软件国际化的情况下,多语言支持问题越来越突出,所谓的多语言支持,是指用户希望能够将自己使用的以原语言显示的应用软件或浏览的在线网页的显示界面转换成自己惯用的语言进行阅读或查看,便于用户自己更容易的操作。然而,来自不同国家的用户,惯用的语言种类也可能不相同,如英语、日语和法语等。因此,有必要提供一种能够根据使用用户的语言需求,将用户使用的以原语言显示的应用软件或浏览的在线网页的显示界面转换成用户惯用的语言的显示界面。
然而,在现有技术中,常用的方法是通过调用人工编写的替换函数,将源代码文件中作为界面显示文本的原语言字符串映射至对应的key值,然后再通过key值映射至对应的目标语言的译文。在数据量较多的情况下,替换效率较低。
技术实现要素:
本发明提供一种基于多国语标签的原语言替换方法,其特征在于,包括以下步骤:s1:提取应用软件或网页源代码中界面显示文件内的界面显示文本,生成多语言资源数据;s2:输出并显示所述多语言资源数据,以便对其进行审核和修正;s3:将所述多语言资源数据中的界面显示文本对应的翻译成与至少一种目标语言对应的译文;s4:根据所述目标语言生成对应的目标语言资源文件;s5:将所述界面显示文本替换为多国语标签;s6:根据用户使用的语言环境,加载与用户使用的语言环境相对应的目标语言资源文件。
优选地,所述步骤s1进一步包括:a1:从应用软件或网页源代码的所有文件中筛选出界面显示文件;a2:根据预设的筛选规则,筛选出所述界面显示文件中的界面显示文本;a3:检测所述界面显示文本中间包含的标点符号,根据所述标点符号的位置拆分所述界面显示文本;a4:为每个所述界面显示文本分配key值,并对应生成多语言资源数据。
优选地,在所述步骤a1中:对应用软件或网页源代码的所有文件的后缀名进行自动扫描,符合预置条件的后缀名的文件才被打开并逐行进行扫描。
优选地,所述符合预置条件的后缀名是指与应用软件或网页的界面显示相关联的界面显示文件。
优选地,在所述步骤a2中:逐行逐字的扫描所述界面显示文件中的内容,缓存连续的原语言字符串,并检测所述原语言字符串是否属于界面显示文本。
优选地,如果所述原语言字符串为非界面显示文本,则清空所述原语言字符串的缓存,选取所述界面显示文件中的下一处内容重新开始逐行逐字进行判断;如果所述原语言字符串为界面显示文本,则取出并保存所述界面显示文本。
优选地,在所述步骤a2中,所述筛选规则包括:根据预设的正则表示式,滤除作为查询数据的条件选项中的原语言字符串。
优选地,在所述步骤a2中,所述筛选规则包括:根据原语言字符串前后是否包含有特定字符或字符串,判断所述原语言字符串是否为注释代码。
优选地,在所述步骤a2中,所述筛选规则包括:根据逻辑判断符号,判断原语言字符串是否是作为逻辑判断条件的非界面显示文本。
优选地,在所述步骤a3中:确定作为界面显示文本的原语言字符串中间是否包含有标点符号:如果所述原语言字符串中间包含有标点符号,则根据所述标点符号的位置拆分所述原语言字符串直至拆分后的原语言字符串内部不再包含有标点符号,然后转码和存储拆分后的所有字符串;如果所述原语言字符串中间不包含有标点符号,则直接转码和存储所述原语言字符串。
优选地,在所述步骤a4中,所述key值是在存储所述界面显示文本时为其自动分配的标识符,且每一个所述key值唯一的标识一个所述界面显示文本。
优选地,在所述步骤s2中:以可编辑的操作界面的方式显示所述多语言资源数据,并对所述多语言资源数据进行编辑操作。
优选地,所述编辑操作包括增加数据、修改数据、删除数据、合并数据和拆分数据。
优选地,在所述步骤s4中,通过调用网络接口,以在线网络访问请求的方式直接访问在线的网络翻译资源,对所述多语言资源数据中的界面显示文本进行翻译。
优选地,在所述步骤s5中:将所述界面显示文本替换为多国语标签的方式包括全部替换和局部替换,所述全部替换是将源代码文件中包含的所有界面显示文本一次性全部替换为对应的多国语标签;所述局部替换是只替换用户当前正在使用的显示界面上的所有界面显示文本,而对其他未被显示的界面上的界面显示文本则暂时不替换。
与现有技术相比,本发明提供的一种基于多国语标签的原语言替换方法,相比传统的通过编写额外的替换函数将源代码文件中的原语言字符串替换为目标语言的方式,替换方式简单且效率更高。
附图说明
图1为本发明实施例提供的一种基于多国语标签的原语言替换方法的步骤流程图;
图2为图1中步骤s101的处理步骤流程图;
图3(a)为界面显示的下拉选择控件的示例;
图3(b)为与图3(a)所示的界面显示的下拉选择控件所对应的源代码文件中的部分代码语句示例;
图4(a)(b)(c)分别对应三种不同形式的注释代码示例;
图4(d)为针对图4(a)(b)(c)所示的三种不同形式的注释代码的筛选规则的部分代码示例;
图5为原语言字符串作为业务逻辑判断条件的部分代码示例。
具体实施方式
以下,参照附图来详细说明本发明的示例性实施例。通过参照以下对示例性实施例和附图的详细说明,可以更加容易地理解本发明的优点和特点以及实现本发明的优点和特点的方法。然而,可以各种不同的形式实现本发明,并且本发明不应该被解释为限于在此阐述的示例性实施例。此外,提供这些实施例从而本公开将会彻底和完整并完全地将本发明的构思传达给本领域的技术人员,并且本发明仅由权利要求限定。在整个说明书中,相同的标号指示相同的部件。
将参照附图详细描述本发明的示例性实施例。本发明可用于众多通用或专用的计算系统环境或配置中,例如包括各种类型的计算机设备。
图1为本发明实施例提供的一种基于多国语标签的原语言替换方法的步骤流程图。本发明所称的“原语言”是指应用软件或网页的源代码中界面显示文件内的界面显示文本所使用的语言,例如:中文软件的原语言即为中文。
如图1所示,步骤s101,提取出应用软件或网页的源代码中界面显示文件内的界面显示文本,生成多语言资源数据。
此处需要转换的原语言,通常为用户使用的应用软件或浏览的网页的显示界面上显示的字符串(以下称之为界面显示文本)。
在上述步骤中,对应用软件或网页源代码中所有文件的后缀名进行自动扫描,依次对上述所有文件中符合预置条件的文件后缀名的文件进行逐行扫描,将扫描的文件名和扫描的文件内容中相邻的原语言字符串提取出来并进行存储。其中,所述符合预置条件的文件后缀名的文件,是指与应用软件或网页的界面显示相关联的文件(以下称之为界面显示文件)。
由于源代码中有些后缀名的文件是不需要扫描或是不可能被扫描的,如系统的资源文件和配置文件。同时,由于本发明主要应用于应用软件或网页的多语言处理中的,所以需要转换的原语言字符串主要是针对界面显示文本。但是实际上,应用软件和网页源代码中的所有文件并不一定都是界面显示文件,以及所有界面显示文件中的原语言字符串并不一定都是界面显示文本,因此,为了避免不必要的扫描,提高扫描的效率,需要先从源代码的所有文件中筛选出界面显示文件,然后才进一步从筛选出的界面显示文件中提取出界面显示文本。
图2为图1中步骤s101的处理步骤流程图。
如图2所示,步骤s201,从应用软件或网页源代码的所有文件中筛选出界面显示文件。
具体的,依次获取上述源代码中所有文件的文件名和文件后缀名,并逐一判断上述文件后缀名是否属于界面显示文件的后缀名,如果属于界面显示文件的后缀名,则打开所述界面显示文件并对其中的内容逐行扫描;如果不属于界面显示文件的后缀名,则跳过该文件后缀名,继续对下一个文件后缀名进行判断。
判断上述文件后缀名是否属于界面显示文件的后缀名的过程,具体如下:预先将需要扫描的各类可能的文件后缀名集中的配置在文件后缀名配置表中并存储该文件后缀名配置表,其中该文件后缀名配置表根据应用软件或网页的编程语言环境的需要可进行文件后缀名的添加或删除;将获取的文件后缀名与上述文件后缀名配置表进行比对,若在上述文件后缀名配置表中找不到获取的文件后缀名,则该获取的文件后缀名不属于界面显示文件的后缀名;如果在上述文件后缀名配置表中能够找到获取的文件后缀,则该获取的文件后缀属于界面显示文件的后缀名。
步骤s202,根据预设的筛选规则,筛选出界面显示文件中的界面显示文本。
由于界面显示文件中会存在一些原语言字符串为非界面显示文本,是不需要被替换的,例如:查询数据的条件选项中的原语言字符串、原语言代码注释、作为业务逻辑判断条件的原语言字符串,以及日志记录等,如果这些也纳入被替换的范畴,没有任何实质性的意义且增加后期处理的工作量,因此需要上述筛选步骤。
针对上述不需要被替换的原语言字符串,在对界面显示文件中的内容进行逐行扫描时,逐行逐字检测源代码中包含的原语言字符串,并将连续的原语言字符串进行缓存,然后根据筛选规则判断上述缓存的原语言字符串是否属于界面显示文本。如果上述缓存的原语言字符串不属于界面显示文本,则清空上述缓存的原语言字符串,选取界面显示文件中的下一处重新开始逐行逐字进行判断;如果上述缓存的原语言字符串为界面显示文本,则取出并存储该界面显示文本。
其中,根据筛选规则判断上述缓存的原语言字符串是否属于界面显示文本的步骤,示例性的列举一下几种类型:
当非界面显示文本为查询数据的条件选项中的原语言字符串时,以源语言是中文为例,如图3(a)和图3(b)所示。图3(a)和3(b)分别为界面显示的下拉选择控件和与其对应的源代码文件中包含的部分代码语句。图3(b)中<optionvalue="正常">正常</option>代码语句中第二个“正常”对应为图3(a)中所示的下拉选择控件中显示的“可用”,为界面显示文本,而第一个“正常”为value属性,是作为条件以便进行数据查询,为非界面显示文本,因此需要筛选规则筛选出上述代码语句中的第二个“正常”。具体的筛选规则为正则表示式:(u'.*>*<'),上述正则表示式表示筛选出上述代码语句<optionvalue="正常">正常</option>中向右的尖括号“>”和向左的尖括号“<”之间所有的内容,即筛选出第二个“正常”。
当非界面显示文本为注释代码中的原语言字符串时,以源语言是中文为例,如图4(a)(b)(c)所示,分别示例性的列举了三种注释代码的表示方式。针对注释代码,所述筛选规则是查找原语言字符串前后是否包含有某些特定字符或字符串,具体如图4(d)所示,通过查找特定的字符或字符串来进行筛选,如:斜杠“/”、星号“*”、中间短横线“-”等。如果temp中包含有上述例举的符号,则就不会给result赋值,就不会筛选出上述原语言字符串。
当非界面显示文本为业务逻辑判断条件中的原语言字符串时,以源语言是中文为例,如图5所示,示例性的例举了原语言字符串作为业务逻辑判断条件的部分代码语句。在图5中,代码语句中的“申请方申请单中止申请”即为逻辑判断条件的原语言字符串。针对上述作为逻辑判断条件的原语言字符串,筛选规则是根据逻辑判断条件前面的逻辑判断符号进行判断的,即在图5中,所述逻辑判断符号为不等于“!=”,如果原语言字符串前存在上述逻辑判断符号,则说明所述原语言字符串为非界面显示文本。
步骤s203,检测所述界面显示文本中间包含的标点符号,根据所述标点符号的位置拆分所述界面显示文本。
在筛选出界面显示文本后,还需要判断作为界面显示文本的原语言字符串中间是否包含有标点符号:如果包含有标点符号,则需要按照标点符号所处的位置对所述原语言字符串进行拆分,直到拆分后的原语言字符串内部不再包含有标点符号,然后对上述拆分完成后的原语言字符串分别进行转码和存储;如果不包含有标点符号,则不需要进行拆分,直接进行转码和存储。因为在一些界面显示文本中,标点符号的位置即为原语言断句的地方,断句前后的原语言含义与未断句合在一起的原语言含义,往往会有区别,为避免上述含义的区别造成后期翻译错误,因而需要进一步识别原语言字符串中间包含的标点符号并根据标点符号对原语言字符串进行拆分。
具体的,以源语言是中文为例,如关于操作失败的警告提示的代码语句可以为:alert("删除失败,请重试!"),该代码语句中的“删除失败,请重试!”表示页面操作成功状态的弹框提醒,为界面显示文本,首先需要对上述原语言字符串中的标点符号进行检测,此处具体的检测代码语句如:line.find(',')>0,查找出原语言字符串“删除失败,请重试!”中的逗号“,”;然后按照逗号“,”所在的位置将所述原语言字符串“删除失败,请重试!”拆分为2个原语言字符串,分别为:“删除失败”和“请重试”,此处具体的拆分原语言字符串的代码语句如:strn=line.split(','),拆分完成后再次遍历每个拆分后的原语言字符串如“删除失败”和“请重试”,依次对其进行其它标点符号的判断和拆分,直至拆分后的原语言字符串中不再包含有任何标点符号;最后对拆分后的每个原语言字符串依次进行转码并存储,其中转码的代码语句如:temp=line.decode("utf8")。
步骤s204,为每个所述界面显示文本分配key值,并对应生成多语言资源数据。
所述key值是在存储所述界面显示文本时自动为其分配的标识符,且每一个所述key值唯一的标识一个所述界面显示文本。key值的类型一般是以字符串的形式分配给对应的每个界面显示文本,且key值命名方式可根据个人习惯随意命名,例如下述表1所示:
表1以源语言是中文为例,源代码文件中包含的界面显示文本与key值的对应关系。
步骤s203中保存的所有界面显示文本和其各自所在的界面显示文件的文件名一起对应保存,生成与所述界面显示文本对应的多语言资源数据,该多语言资源数据可以为多种格式形式的数据文件,例如:xml、database、txt或excel等,其中database的形式如下述表2所示,上述各种形式使得后续的输入或统计分析等操作更方便。
表2以database形式为例的多语言资源数据结构。
对于连续的原语言字符间的空格、数字视为原语言的一部分。当界面显示文件中的内容全部扫描完成时,对该界面显示文件的扫描过程结束。在依次遍历源代码中所有文件后,上述扫描过程结束。
步骤s102,输出并显示所述多语言资源数据,以便对其进行审核和修正。
为了进一步提高上述多语言资源数据的准确性,完整性,需要对上述生成的多语言资源数据进行增加、删除、修改、合并、拆分等操作,可以消除上述多语言资源数据的冗余部分、增加上述多语言资源数据中缺失部分或纠正上述多语言资源数据中的错误部分。
具体的,上述多语言资源数据以可编辑的操作界面的方式显示,人工逐一筛查,例如:可以对上述多语言资源数据补充遗漏的原语言字符串所对应的表结构;可以删除上述多语言资源数据中重复的原语言字符串所对应的表结构;可以将上述多语言资源数据的原语言字符串所对应的表结构中的数据进行修改,如修改key值;可以将上述多语言资源数据中含义相近的原语言字符串或者语义重复的原语言字符串进行合并,以原语言是中文为例,如“中文显示”和“中文显示”可以合并为一个“中文显示”;对一些较长的原语言字符串,可以拆分为多项较短的原语言字符串。
步骤s103,将所述多语言资源数据中的界面显示文本翻译成与至少一种目标语言对应的译文。
在上述步骤中,根据客户需要的精确程度,翻译的方式可以有以下两种:一种是针对翻译严格要求的用户,可以将上述多语言资源数据以如表1所示的表格文件的形式导出,并将上述导出的文件交给专业的翻译人员,翻译人员对上述导出的文件中的界面显示文本进行人工翻译,将原语言字符串逐项翻译成用户需要的目标语言所对应的字符串,如英文字符串和/或日文字符串等,将翻译出的目标语言所对应的字符串写入表1内原语言字符串下方对应栏中,然后再将上述翻译完成的文件导入到数据库中进行多语言资源数据的更新;另一种是针对翻译并不严格要求的用户,可以通过调用网络接口,以在线网络访问请求的方式直接访问在线的网络翻译资源,对上述多语言资源数据中包含的原语言字符串进行翻译,如调用百度翻译的api接口来访问百度翻译,然后对应保存翻译后的多语言资源数据即可。
步骤s104,根据所述目标语言生成对应的目标语言资源文件。
在上述步骤中,根据应用软件或网页所采用的编程语言和程序的设计方式,根据所述多语言资源数据中的目标语言,生成相应的应用软件或网页能够加载的对应每种翻译语言的目标语言资源文件,并存储在某一路径下。当目标语言只有一种时,对应生成与该目标语言对应的一个目标语言资源文件和一个原语言资源文件,例如:用户需要将中文界面翻译成英文时,即目标语言为英文,原语言为中文,其对应生成的英文资源文件可以命名为message.en,以及生成的中文资源文件为message.ch;当目标语言包含有多种时,对应分别生成多个目标语言资源文件和一个原语言资源文件,且所述多个目标语言资源文件分别对应一种目标语言,例如:目标语言包括英文和日文两种时,对应生成一份英文资源文件message.en、一份日文资源文件message.jp和一份原语言资源文件。生成原语言资源文件的作用是:当用户的原语言显示界面转换成目标语言显示的界面后,通过上述保留的原语言资源文件,还可以从目标语言显示的界面转换回到原语言界面。
另外,每个目标语言资源文件中的内容,包括界面显示文本的目标语言的译文和所述界面显示文本的key值。例如:当目标语言为英文时,在英文资源文件message.en中,界面显示文本的英文译文和所述界面显示文本的key值的对应关系,举例如下述表3所示:
表3是英文资源文件中key值与界面显示文本的英文译文的对应关系。
步骤s105,将所述界面显示文本替换为多国语标签。
源代码文件中的界面显示文本被替换成多国语标签,即将所述界面显示文本替换成与其对应的key值,所述多国语标签的代码语句具体为:<fmt:messagekey="界面显示文本的key值"/>,具体替换的示例如下:源代码文件中包含某一个界面显示文本的代码语句为:<p>欢迎:<br/></p>,将其中的界面显示文本“欢迎”替换为多国语标签后变成<p><fmt:messagekey="main.welcome"/>:<br/></p>,其中main.welcome为界面显示文本“欢迎”的key值。此处将界面显示文本替换成对应的多国语标签的好处是:在后续步骤中,key值能够直接对应各个目标语言资源文件中的界面显示文本的译文,只需通过key值索引就能快速的找到各个目标语言资源文件中对应的界面显示文本的译文,且并不需要人工额外的编写替换函数用于界面显示文本的替换。
另外,将所述界面显示文本替换为多国语标签的方式可以有两种:一种是全部替换,即将源代码文件中包含的所有界面显示文本一次性全部替换为对应的多国语标签;另一种是局部替换,即只替换用户当前正在使用的显示界面上的所有界面显示文本,而对其他未被显示的界面上的界面显示文本则暂时不替换,只有当用户通过鼠标点击进入另一个显示界面时,根据用户的点击反馈,对应的将所述另一个显示界面上的界面显示文本替换成多国语标签。
步骤s106,根据用户使用的语言环境,加载与用户使用的语言环境相对应的目标语言资源文件。
确定用户使用的语言环境可以有两种方式:一种是让用户自己选择所需的目标语言,具体表现形式可以是通过界面显示的选择控件,选择控件中列举有多种目标语言,用户可以根据自己的需要,在选择控件的选项中选择其中一种目标语言;另一种是自动检测用户使用的语言环境,确定目标语言,如通过检测用户使用的浏览器或其它形式文件。
针对用户自己选择所需的目标语言的方式,其代码语句示例性可以为:
<fmt:setlocalevalue="${sessionscope.locale}"/>;
<fmt:bundlebasename="message">;
上述代码语句中的第一句表示获取用户设置的目标语言,其中locale变量表示用户设置的目标语言;第二句表示指定所要寻找的目标语言资源文件的范围。
根据用户设置的目标语言,在指定范围的目标语言资源文件中找到并加载与用户设置的目标语言相对应的目标语言资源文件。
针对自动检测用户使用的语言环境的方式,如用户使用的浏览器的语言环境,其代码语句示例性可以为:
<fmt:setlocalevalue="${request.getlocale()}"/>;
<fmt:bundlebasename="message">;
上述代码语句中的第一句表示检测用户使用的浏览器的语言环境,其中request表示网络请求。
获取用户使用的浏览器的语言环境,在指定范围的目标语言资源文件中找到并加载与用户使用的浏览器的语言环境相对应的目标语言资源文件。
当用户运行网页或应用软件时,根据步骤s105中插入的多国语标签中的key值,读取并显示上述指定的目标语言资源文件内与所述key值相对应的译文。
本发明提供的基于多国语标签的原语言替换方法,相比传统的通过编写额外的替换函数将源代码文件中的原语言字符串替换为目标语言的方式,替换方式效率更高。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。