首页> 中国专利> 应用程序的语言转换方法、装置、计算机设备和存储介质

应用程序的语言转换方法、装置、计算机设备和存储介质

摘要

一种应用程序的语言转换方法,包括:获取应用程序的源码,对源码进行编译获得编译文件;识别编译文件中的待翻译字符串;待翻译字符串包括应用程序运行时需显示的字符串;获取待翻译字符串被翻译为目标语言的翻译后字符串;将翻译后字符串内置进应用程序的源码,以及在应用程序的源码中注入的用于转换显示语言的目标代码,获得更新后应用程序代码;重新编译更新后应用程序代码,获得应用程序的更新后编译文件。通过上述方法获得的应用程序在启动时终端将会根据应用程序代码中的目标代码将与显示相关的操作指令指向的显示文件修改为当前语言环境下的目标语言显示文件,包括各翻译后字符串,对于已有的不支持某种特定语言的应用程序,改造成本低。

著录项

  • 公开/公告号CN113835714A

    专利类型发明专利

  • 公开/公告日2021-12-24

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;

    申请/专利号CN202010588024.9

  • 发明设计人 何兆林;张赛;朱海军;

    申请日2020-06-24

  • 分类号G06F8/51(20180101);G06F8/41(20180101);

  • 代理机构44224 广州华进联合专利商标代理有限公司;

  • 代理人唐彩琴

  • 地址 518000 广东省深圳市南山区高新区科技中一路腾讯大厦35层

  • 入库时间 2023-06-19 13:49:36

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-10-11

    实质审查的生效 IPC(主分类):G06F 8/51 专利申请号:2020105880249 申请日:20200624

    实质审查的生效

说明书

技术领域

本申请涉及计算机技术领域,特别是涉及一种应用程序的语言转换方法、装置、计算机设备和存储介质。

背景技术

应用程序面向多种语言的用户时,同一款应用程序需要开发多种不同语言,以供不同语言的用户使用。

应用程序开发时,对于要展示给用户的文案信息,开发者要先定义一个key值,并提取到单独的字符串文件中,并根据支持的语言分目录存放,最后在调用系统API渲染时,先根据当前语言环境,用这个key取到对应的值之后再进行渲染。而支持多种语言的应用程序需开发者在开发阶段对该应用程序定义多个key值。因此若应用程序已被开发为仅支持某特定语言,需要将该应用程序改造成为支持其它语言时需重新编码获得新的应用程序,改造成本大。

发明内容

基于此,有必要针对上述将仅支持某特定语言的应用程序改造成为支持其它语言时,改造成本大的技术问题,提供一种应用程序的语言转换方法、装置、计算机设备和存储介质。

一种应用程序的语言转换方法,所述方法包括:

获取所述应用程序的源码,对所述源码进行编译获得编译文件;

识别所述编译文件中的待翻译字符串;所述待翻译字符串包括所述应用程序运行时需显示的字符串;

获取所述待翻译字符串被翻译为目标语言的翻译后字符串;

将所述翻译后字符串内置进所述应用程序的源码,以及在所述应用程序的源码中注入的用于转换显示语言的目标代码,获得更新后应用程序代码;

重新编译所述更新后应用程序代码,获得所述应用程序的更新后编译文件。

在一个实施例中,所述预设字符串列表的确定过程包括步骤:

获取测试应用程序的测试源码;所述测试源码不包含应用程序的待显示字符串;

根据所述测试源码获得对应的测试编译文件;

读取所述测试编译文件中的字符串,根据所述测试编译文件中的字符串生成所述预设字符串列表。

在一个实施例中,所述对所述不属于所述预设字符串列表的字符串执行冗余数据处理,获得所述待翻译字符串,包括:

获取预设特定字符串,所述预设特定字符串包括所述应用程序的待显示字符串中无需翻译的字符串;

将所述不属于所述预设字符串列表的字符串中不属于所述预设特定字符串,确定为所述待翻译字符串。

一种应用程序的语言转换方法,所述方法包括:

接收应用程序启动指令,启动所述应用程序启动指令对应的应用程序;所述应用程序的代码中包含注入的用于转换显示语言的目标代码;

基于所述目标代码,将与显示关联的操作指令指向的初始语言显示文件修改为指向目标语言显示文件;其中,所述目标语言显示文件包括:所述应用程序的待翻译字符串经过翻译获得的翻译后字符串,所述待翻译字符串为从所述应用程序的源码对应的编译文件中识别得到;

在接收到与显示关联的操作指令时,在所述目标语言显示文件中查找所述与显示关联的操作指令对应的目标文字,显示所述目标文字。

一种应用程序的语言转换装置,所述装置包括:

第一编译模块,用于获取所述应用程序的源码,对所述源码进行编译获得编译文件;

识别模块,用于识别所述编译文件中的待翻译字符串;

字符串获取模块,用于获取所述待翻译字符串被翻译为目标语言的翻译后字符串;

代码更新模块,用于将所述翻译后字符串内置进所述应用程序的源码,以及在所述应用程序的源码中注入的用于转换显示语言的目标代码,获得更新后应用程序代码;

第二编译模块,用于重新编译所述更新后应用程序代码,获得所述应用程序的更新后编译文件。

一种应用程序的语言转换装置,所述装置包括:

启动指令接收模块,用于接收应用程序启动指令,启动应用程序启动指令对应的应用程序;应用程序的代码中包含注入的用于转换显示语言的目标代码;

指向修改模块,用于基于所述目标代码,将与显示关联的操作指令指向的初始语言显示文件修改为指向目标语言显示文件;其中,目标语言显示文件包括:应用程序的待翻译字符串经过翻译获得的翻译后字符串,待翻译字符串为从应用程序的源码对应的编译文件中识别得到;

显示模块,用于在接收到与显示关联的操作指令时,在目标语言显示文件中查找与显示关联的操作指令对应的目标文字,显示目标文字。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述应用程序的语言转换方法或者应用程序的语言转换方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述应用程序的语言转换方法或者应用程序的语言转换方法的步骤。

上述应用程序的语言转换方法、装置、计算机设备和存储介质,获取应用程序的源码,对源码进行编译获得编译文件,从编译文件中识别出应用程序运行时需要显示的待翻译字符串,进一步地获取待翻译字符串被翻译为目标语言的翻译后字符串,然后将翻译后字符串内置到应用程序的源码,以及在所述应用程序的源码中注入的用于转换显示语言的目标代码,获得更新后应用程序代码,对更新后应用程序代码进行重新编译,获得应用程序的更新后编译文件。上述方法由于在应用程序中预先注入了用于转换显示语言的目标代码而后经过编译,且从源码的编译文件中识别到需显示的待翻译字符串,并将对应的翻译后字符串内置到应用程序的源码,获得的应用程序代码重新编译后得到应用程序,用户安装该应用程序并启动时,将会根据目标代码将显示相关的操作指令指向的显示文件修改为当前语言环境下的目标语言显示文件,包括各翻译后字符串;对于已有的不支持某种特定语言的应用程序,改造成本低。

附图说明

图1为一个实施例中应用程序的语言转换方法的流程示意图;

图2为一个实施例中识别编译文件中的待翻译字符串的流程示意图;

图3为一个具体实施例中mach-o文件中ustring的TEXT Segment的示意图;

图4为一个具体实施例中mach-o文件中cstring的TEXT Segment的示意图;

图5为一个实施例中预设字符串列表的确定过程的流程示意图;

图6为一个实施例中应用程序的语言转换方法的流程示意图;

图7为一个具体实施例中应用程序的语言转换方法的流程示意图;

图8为一个具体实施例中扫描mach-o文件得到待翻译字符串的流程示意图

图9为另一个具体实施例中应用程序的语言转换方法的流程示意图;

图10为一个实施例中应用程序的语言转换装置的结构框图;

图11为另一个实施例中应用程序的语言转换装置的结构框图;

图12为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

在一个实施例中,如图1所示,提供了一种应用程序的语言转换方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括步骤S110至步骤S150。

步骤S110,获取应用程序的源码,对源码进行编译获得编译文件。

应用程序(Application)是软件的主要分类之一,是指为针对使用者的某种应用目的所撰写的软件。其中,应用程序的源码是指应用程序的源代码;编译是指利用编译程序从源语言编写的源程序产生目标程序的过程,或者用编译程序产生目标程序的动作。本实施例中,对获取的应用程序的源码进行编译,获得对应的编译文件。在一个实施例中,获取应用程序的源码可以通过任意一种方式实现。

在一个实施例中,对源码进行编译可采用不同的编译方式实现;在一个具体实施例中,对源码进行编译获得编译文件,包括:接收编译指令,根据编译指令将源码编译为mach-o文件,编译文件包括mach-o文件。

其中,Mach-O为Mach Object文件格式的缩写,它是macosx和iOS系统的一种用于可执行文件,目标代码,动态库,内核转储的文件格式。本实施例中,获取应用程序的源码之后,将其编译为mach-o文件,进而可以在mach-o文件中识别出待翻译字符串。

步骤S120,识别编译文件中的待翻译字符串;待翻译字符串包括应用程序运行时需显示的字符串。

本申请的应用程序的语言转换方法主要用于对已有的应用程序中改变应用程序在使用时显示的语言,因此需对应用程序中所有需要显示的字符串进行翻译,得到期望改变为的语言类型的字符串,再结合其它手段,使得应用程序在显示按照改变后的语言类型显示字符串。在本实施例中,将应用程序在运行时需显示的字符串记为待翻译字符串,也是需要在后续过程中进行翻译的字符串。

在将应用程序的源码编译为mach-o文件的一个实施例中,识别编译文件中的待翻译字符串可通过解析软件实现,例如在一个具体实施例中,可采用开源软件machoview对mach-o文件进行解析。

步骤S130,获取待翻译字符串被翻译为目标语言的翻译后字符串。

其中,目标语言表示期望将应用程序的显示语言改变为的语言类型。在一个实施例中,获取待翻译字符串被翻译为目标语言的翻译后字符串包括:获取输入的待翻译字符串被翻译为目标语言的翻译后字符串;即在本实施例中,在从源码对应的编译文件中识别得到待翻译字符串之后,将待翻译字符串发送至翻译人员进行翻译,由翻译人员进行翻译后将翻译后字符串输入到终端。在另一个实施例中,获取待翻译字符串被翻译为目标语言的翻译后字符串包括:将待翻译字符串输入预设翻译软件,获取预设翻译软件输出的待翻译字符串被翻译为目标语言的翻译后字符串;即通过翻译软件等实现翻译。可以理解地,在其它实施例中,获取翻译后字符串也可以通过其它方式实现。

步骤S140,将翻译后字符串内置进应用程序的源码,以及在应用程序的源码中注入用于转换显示语言的目标代码,获得更新后应用程序代码。

将翻译后字符串通过一定的方式内置到应用程序的源码中,可以通过任意一种方式实现。

将在应用程序的源码中注入的用于转换显示语言的相关代码记为目标代码,在源码中注入目标代码后,在应用程序启动时将会根据目标代码将与显示相关的操作指令对应指向的显示程序修改为目标语言显示文件,其中,目标语言显示文件中即包含了待翻译字符串被翻译为目标语言的翻译后字符串。从而在运行应用程序期间,若接收到与显示相关的操作指令时,将会从目标语言显示文件中查找需要显示的内容进行显示。进一步地,本实施例中,将内置了翻译后字符串和注入了目标代码的应用程序代码记为更新后应用程序代码。

在一个具体实施例中,在应用程序中注入用于转换显示语言的目标代码的过程是通过采用面向切面编程技术实现的;进一步地,在一个具体实施例中,在应用程序的源码中采用面向切面编程技术注入的用于转换显示语言的目标代码如下(本实施例中,以在源码中的showTips(这是个“中文tips!”)的注入目标代码为例):

其中,面向切面编程(AOP,Aspect Oriented Programming),是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能。本实施例中,采用面向切面编程的方式注入目标代码,可在不修改源代码的情况下为应用程序添加转换显示语言的功能。

在一个实施例中,在应用程序的源码中注入用于转换显示语言的目标代码可以在对源码进行编译获得编译文件之前进行;在另一个实施例中,在应用程序的源码中注入用于转换显示语言的目标代码也可以在将翻译后字符串内置进应用程序的源码之后进行。

步骤S150,重新编译更新后应用程序代码,获得应用程序的更新后编译文件。

对于内置了翻译后字符串以及注入了目标代码的更新后应用程序代码,重新进行编译,获得该应用程序的更新后的编译文件;进一步地,对于应用程序更新后的编译文件进行打包,可得到该应用程序的安装包,更进一步地,对于安装包需进行测试和验证,若通过验证则可发布。

上述应用程序的语言转换方法,获取应用程序的源码,对源码进行编译获得编译文件,从编译文件中识别出应用程序运行时需要显示的待翻译字符串,进一步地获取待翻译字符串被翻译为目标语言的翻译后字符串,然后将翻译后字符串内置到应用程序的源码,以及在所述应用程序的源码中注入的用于转换显示语言的目标代码,获得更新后应用程序代码,对更新后应用程序代码进行重新编译,获得应用程序的更新后编译文件。上述方法由于在应用程序中预先注入了用于转换显示语言的目标代码,且从源码的编译文件中识别到需显示的待翻译字符串,并将对应的翻译后字符串内置到应用程序的源码,获得的应用程序代码重新编译后得到应用程序,用户安装该应用程序并启动时,将会根据目标代码将显示相关的操作指令指向的显示文件修改为当前语言环境下的目标语言显示文件,包括各翻译后字符串;对于已有的不支持某种特定语言的应用程序,改造成本低。

在一个实施例中,在识别编译文件中的待翻译字符串之后,还包括:将待翻译字符串按照预设格式进行转换,获得待翻译字符串对应的待翻译文本;在本实施例中,获取待翻译字符串被翻译为目标语言的翻译后字符串,包括:获取待翻译文本被翻译为目标语言的翻译后字符串。

预设格式是预先根据实际情况进行设置的格式,将待翻译字符串按照预设格式进行转换,实际就是指将从编译文件中识别出的待翻译字符串以预设格式输出,本实施例中,将转换为预设格式的待翻译字符串记为待翻译文本。进一步地,在获取翻译后字符串时按照待翻译文本进行获取。

进一步地,在一个实施例中,识别得到编译文件中需要翻译的字符串取出来作为key,同时对应设置value值为固定词语,如需要翻译的字符串为“这是个中文tips!”,预先设定为value值的固定词语为“待翻译”,则按照预设格式转换后,得到“这是个中文tips!”=“待翻译”。

在一个具体实施例中,以待翻译字符串内容为“简体中文”为例,将从编译文件中识别出的待翻译字符串按照“简体中文”=“待翻译”的预设格式进行转换,其中,“待翻译”为固定占位符,获取到的翻译后字符串将会填入“待翻译”的位置,以目标语言为英语为例,获取到目标语言的翻译后字符串之后,得到“简体中文”=“simplified Chinese”的结果。在另一个具体实施例中,在翻译工作由翻译人员完成的实施例中,翻译人员会把“待翻译”替换成对应的目标语言。

本实施例中在识别得到待翻译字符串之后,按照预设格式进行转换,然后获取转换之后的待翻译文本对应的翻译后字符串,可减少遗漏待翻译字符串的情况。

在一个实施例中,如图2所示,识别编译文件中的待翻译字符串,包括步骤S121至步骤S123。

步骤S121,读取mach-o文件中的字符串集。

步骤S122,获取预设字符串列表,预设字符串列表中不包含应用程序的待显示字符串。

步骤S123,将编译文件中的字符串与预设字符串列表对比,将不属于预设字符串列表的字符串确定为编译文件中的待翻译字符串。

其中,预设字符串列表为预先设置的,其中不包含应用程序中需要显示的字符串,可以理解地,在本实施例中应用程序中需要显示的字符串是可能需要进行翻译的字符串,因此预设字符串中的字符串均为不需要进行翻译的字符串。其中,预设字符串列表可以以任何一种方式获得。

mach-o文件中包括大量字符串,依次读取其中的字符串并与预设字符串列表中的字符串进行对比,若字符串与预设字符串列表中的字符串相同,则认为这一字符串是不需要进行翻译的字符串,若字符串在预设字符串列表中并未出现,则表示这一字符串需要翻译;所有字符串比对结束,可得到不属于预设字符串列表中的字符串,即得到需要翻译的待翻译字符串。

进一步地,在一个实施例中,mach-o文件中包含cstring和ustring等TEXTSegment,TEXT Segment是mach-o文件中的一块只读区域,用于存放代码中的字符串等常量数据。其中,cstring是mach-o文件中用来存放英文字符的地方,ustring是mach-o文件中用来存放中文等unicode字符的地方。在一个实施例中,在读取mach-o文件中的字符串集之前,还包括:获取应用程序的源码的编码类型;读取mach-o文件中的字符串集,包括:读取mach-o文件中存储与编码类型对应字符串的代码段。进一步地,在一个实施例,若应用程序的源码使用的是中文等unicode字符集,则读取mach-o文件中存放与中文等unicode字符集对应字符串的ustring的TEXT Segment,并从中识别出待翻译字符串;若应用程序的源码使用的是英文等非unicode字符集,则读取mach-o文件中存放与英文等非unicode字符集对应字符串的cstring的TEXT Segment,并从中识别出待翻译字符串;若应用程序的源码使用的编码类型包括中文和英文字符集,则分别读取mach-o文件的ustring和的cstring的TEXTSegment,得到待翻译字符串。

如图3所示为一个具体实施例中,mach-o文件中ustring的TEXT Segment的示意图,其中,value所对应的一列中所示为本示例中的待翻译字符串。如图4所示为一个具体实施例中,mach-o文件中cstring的TEXT Segment的示意图,其中,cstring段会有一些编译器生成的冗余数据,图4中除了实线框中的内容外,其它都是不需要翻译的;白色实线框中所示的内容“this is a tips message!”即为待翻译字符串之一。

本实施例中,通过确定应用程序的源码所使用的编码格式,进而确定识别待翻译字符串所需要扫描的位置,可提高扫描编译文件得到待翻译字符串的效率。

进一步地,在一个实施例中,如图5所示,预设字符串列表的确定过程包括步骤S510至步骤S530。

步骤S510,获取测试应用程序的测试源码;测试源码不包含应用程序的待显示字符串。

测试应用程序的源码中不包含需要显示的字符串,即待翻译的字符串,可以用于获取不需要翻译的所有字符串,在本实施例中,将测试应用程序的源码记为测试源码。

步骤S520,根据测试源码获得对应的测试编译文件。

对测试源码进行编译,即可获得测试源码对应的编译文件,记为测试编译文件;需要说明的是,对测试源码进行编译所采用的方法与上述对应用程序进行编译获得编译文件所采用的方式相同,如在一个具体实施例中,根据接收的编译指令对测试源码进行编译,获得测试源码对应的mach-o文件。

步骤S530,读取测试编译文件中的字符串,根据测试编译文件中的字符串生成预设字符串列表。

由于测试应用程序的测试源码中并不包含待翻译的字符串(应用程序运行时需显示的字符串),因此测试源码对应的测试编译文件中的所有字符串均为不需要翻译的字符串,将测试编译文件中的所有字符串加入同一列表,得到预设字符串列表。

本实施例中,通过一个测试应用程序进行编译,并根据得到的测试编译文件中的字符串得到应用程序的编译文件中不需要翻译的预设字符串列表,可用于在应用程序的编译文件中识别出需要翻译的字符串。

进一步地,在一个实施例中,在将编译文件中的字符串与预设字符串列表对比之后,还包括对不属于预设字符串列表的字符串执行冗余数据处理,获得待翻译字符串。

数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。在一个实施例中,在将应用程序的编译文件与预设字符串列表进行比对获得待翻译字符串,其中仍可能还会存在部分不需要翻译的字符串,例如emoji字符(emoji字符即绘文字,是一种视觉情感符号,可用来代表多种表情,如笑脸表示笑、蛋糕表示食物等)等,因此在本实施例中对于待翻译字符串进行冗余处理,将仍可能存在的不需要翻译的字符串过滤。在一个实施例中,冗余数据处理可采用正则和穷举等手段。其中,正则是指正则表达式,正则表达式是对字符串(包括普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。穷举法又称列举法、枚举法,是蛮力策略的具体体现,是一种简单而直接地解决问题的方法。其基本思想是逐一列举问题所涉及的所有情形,并根据问题提出的条件检验哪些是问题的解,哪些应予排除,通常在找不到解决问题的规律时对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从中找出那些符合要求的候选解作为问题的解。

进一步地,在将源码编译为mach-o文件的一个实施例中,若源码中采用了英文等非unicode字符进行编码,在mach-o文件中的cstring的text segment进行识别待翻译字符串,进一步地,对于识别获得的待翻译字符串进行冗余数据处理。本实施例中,仅在从mach-o文件中识别得到待翻译字符串时,对识别得到的待翻译字符串进行冗余数据处理,避免不必要的处理,可提高处理速度。

在一个实施例中,从编译文件中识别出来的字符中可能还包含一些不需要翻译的字符串,例如emoji字符;在本实施例中,对不属于预设字符串列表的字符串执行冗余数据处理,获得待翻译字符串,包括:获取预设特定字符串,预设特定字符串包括应用程序的待显示字符串中无需翻译的字符串;将不属于预设字符串列表的字符串中不属于预设特定字符串,确定为待翻译字符串。通过与预设字符串列表进行比对筛选出应用程序的待显示字符串,待显示字符串中可能包含非文字的字符串,如表情等,此时可通过将待显示字符串中的表情等不要翻译的字符串设置为预设特定字符串,而后通过该预设特定字符串对不属于预设字符串列表的字符串进行进一步过滤,将其中属于预设特定字符串的字符串过滤掉,仅保留编译文件中识别出的待翻译字符串中不属于预设特定字符串的字符串,即剔除表情等之后得到的文字和数字等类型字符串。

在一个具体实施例中,以过滤从mach-o文件中与预设字符串列表进行比对后得到的待翻译字符串中可能存在emoji字符为例,进行冗余数据处理的相关代码如下:

本实施例中,通过正则的方式对从编译文件识别的待翻译字符串中识别出emoji字符(不需翻译)进行剔除,将emoji字符或emoji字符的组合预先设定为预设特定字符串,将不属于预设字符串列表的字符串依次与预设特定字符串进行比对,将不属于预设字符串列表且不属于预设特定字符串的字符串保留,确定为待翻译字符串。在另一个实施例中,也可以通过穷举的方式对不属于预设字符串列表的字符串进行过如滤emoji字符等不需翻译的字符串;通过穷举的方式进行冗余数据处理时,以emoji字符为例,依次将所有emoji字符与不属于预设字符串列表的字符串进行比对,将待翻译字符串中的emoji字符过滤,保留剩余的字符得到冗余处理后的待翻译字符串。通过上述方法可进一步地确保冗余处理后得到的字符串中不包含不需要翻译的字符串,从而提高后续翻译效率。

进一步地,在一个实施例中,将翻译后字符串内置进应用程序的源码,包括:将冗余处理后对应的翻译后字符串内置进应用程序的源码。可以理解地,在进行冗余数据处理后,将冗余数据处理后的字符串对应的翻译后字符串内置到应用程序的源码中。

在本实施例中,在通过预设字符串列表比对筛选出字符串后,还通过如正则或者穷举等冗余数据处理方式对筛选出的字符串中可能存在的不需要翻译的字符串进行处理,可提高后续的处理效率。

在另一个实施例中,本申请还提供一种应用程序的语言转换方法,如图6所示,包括步骤S610至步骤S630。

步骤S610,接收应用程序启动指令,启动应用程序启动指令对应的应用程序。

应用程序启动指令可以是用户希望启动应用程序时发起的指令,终端在接收到应用程序启动指令后,根据应用程序启动指令启动对应的应用程序。在本实施例中,应用程序的代码中包含注入的用于转换显示语言的目标代码;在启动时执行应用程序的代码将会根据目标代码执行对应的操作,即转换显示语言。

步骤S620,基于目标代码,将与显示关联的操作指令指向的初始语言显示文件修改为指向目标语言显示文件;其中,目标语言显示文件包括:应用程序的待翻译字符串经过翻译获得的翻译后字符串,待翻译字符串为从应用程序的源码对应的编译文件中识别得到。

目标代码是用于转换显示语言,因此执行目标代码时,终端将根据目标代码将与显示相关的操作指令指向的初始语言显示文件修改为指向目标语言显示文件,其中,目标语言显示文件中包含待翻译字符串被翻译为目标语言的翻译后字符串,而待翻译字符串则是从应用程序的源码对应的编译文件中识别得到。在一个具体实施例中,应用程序的源码对应的编译文件为mach-o文件,从mach-o文件中识别得到待翻译字符串包括:将mach-o文件中的字符串与预设字符串列表依次进行比对,将不属于预设字符串列表的字符串确定为待翻译字符串,其中,预设字符串列表中包含所有不需要翻译的字符串。

步骤S630,在接收到与显示关联的操作指令时,在目标语言显示文件中查找与显示关联的操作指令对应的目标文字,显示目标文字。

应用程序启动后,在运行过程中,用户做出与显示相关联的操作时,终端将会接收到对应的操作指令,终端确定该操作指令对应的显示字符,从目标语言显示文件中查找该显示字符,显示在界面中。在一个实施例中,具体为对字符串渲染API的过程中,根据目标代码将代码中的原字符串替换成目标语言显示文件中的字符串,即实现转换为目标语言进行显示的效果。

上述方法由于在应用程序中预先注入了用于转换显示语言的目标代码,且从源码的编译文件中识别到需显示的待翻译字符串,并将对应的翻译后字符串内置到应用程序的源码,获得的应用程序代码重新编译后得到应用程序,用户安装该应用程序并启动时,将会根据目标代码将显示相关的操作指令指向的显示文件修改为当前语言环境下的目标语言显示文件,包括各翻译后字符串;对于已有的不支持某种特定语言的应用程序,改造成本低。

如图7所示为一个具体实施例中,应用程序的语言转换方法的流程示意图,包括以下步骤:

获取应用程序的源码,根据接收的编译指令将源码编译得到mach-o文件;扫描mach-o文件识别得到其中的待翻译字符串,按照预设格式“(待翻译字符串内容)”=“待翻译”进行转换,获得待翻译字符串(待翻译语言文件)。获取由翻译团队对待翻译字符串翻译为目标语言的翻译后字符串(图中翻译结果),将翻译结果内置到应用程序的代码,同时在应用程序代码中采用AOP技术注入用于转换显示语言的相关代码,得到更新后的应用程序代码;最后对于更新后的应用程序代码进行重新编译,获得应用程序的更新后编译文件。

其中,如图8所示为一个具体实施例中扫描mach-o文件得到待翻译字符串的流程示意图,包括步骤:确定应用程序的源码的编码类型,若编码类型为unicode字符,则扫描mach-o文件中ustring的TEXT Segment;若编码类型为英文等非unicode字符,则扫描mach-o文件中cstring的TEXT Segment;若为中文和英文结合的字符集,则分别扫描mach-o文件的ustring和的cstring的TEXT Segment。进一步地,对于扫描得到的结果进行冗余数据处理并按照预设格式进行转换后输出,得到上述待翻译字符串。

进一步地,如图9所示为一个具体实施例中应用程序的语言转换方法的流程示意图,包括以下步骤:

接收应用程序启动指令,启动对应的应用程序;执行应用程序的main函数,读取到main函数中注入的目标代码时,根据目标代码将与显示关联的操作指令指向的初始语言显示文件修改为指向目标语言显示文件(My show showTips implement);进而在UI界面接收到与显示相关联的操作指令时,从目标语言显示文件中查找对应的目标语言的字符串进行显示。

上述应用程序的语言转换方法,不需要重新编写应用程序,对于已有的应用程序也可通过上述方法实现转换应用程序的语言的效果,可有效降低应用程序的语言转换的成本。

应该理解的是,虽然图1-10中的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-10中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图10所示,提供了一种应用程序的语言转换装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:第一编译模块1010、识别模块1020、字符串获取模块1030、代码更新模块1040和第二编译模块1050,其中:

第一编译模块1010,用于获取应用程序的源码,对源码进行编译获得编译文件;

识别模块1020,用于识别编译文件中的待翻译字符串;

字符串获取模块1030,用于获取待翻译字符串被翻译为目标语言的翻译后字符串;

代码更新模块1040,用于将翻译后字符串内置进应用程序的源码,以及在应用程序的源码中注入的用于转换显示语言的目标代码,获得更新后应用程序代码;

第二编译模块1050,用于重新编译更新后应用程序代码,获得应用程序的更新后编译文件。

在一个实施例中,上述装置还包括:格式转换模块,用于将待翻译字符串按照预设格式进行转换,获得待翻译字符串对应的待翻译文本;在本实施例中,字符串获取模块1030具体用于获取待翻译文本被翻译为目标语言的翻译后字符串。

在一个实施例中,上述装置的第一编译模块1010,具体用于接收编译指令,根据编译指令将源码编译为mach-o文件,编译文件包括mach-o文件。

在一个实施例中,上述装置的识别模块1020,包括:字符串集读取单元,用于读取mach-o文件中的字符串集;预设字符串集获取单元,用于获取预设字符串列表,预设字符串列表中不包含应用程序的待显示字符串;待翻译字符串确定单元,用于将编译文件中的字符串与预设字符串列表对比,将不属于预设字符串列表的字符串确定为编译文件中的待翻译字符串。

其中,在一个实施例中,预设字符串列表的确定过程包括步骤:获取测试应用程序的测试源码;测试源码不包含应用程序的待显示字符串;根据测试源码获得对应的测试编译文件;读取测试编译文件中的字符串,根据测试编译文件中的字符串生成预设字符串列表。

在一个实施例中,上述装置还包括:冗余处理模块,用于对翻译后字符串执行冗余数据处理,获得冗余处理后的翻译后字符串;在本实施例中,代码更新模块1040具体用于:将冗余处理后的翻译后字符串内置进应用程序的源码。

在另一个实施例中,如图11所示,本申请还提供了一种应用程序的语言转换装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:启动指令接收模块1110、指向修改模块1120和显示模块1130,其中:

启动指令接收模块1110,用于接收应用程序启动指令,启动应用程序启动指令对应的应用程序;应用程序的代码中包含注入的用于转换显示语言的目标代码;

指向修改模块1120,用于基于所述目标代码,将与显示关联的操作指令指向的初始语言显示文件修改为指向目标语言显示文件;其中,目标语言显示文件包括:应用程序的待翻译字符串经过翻译获得的翻译后字符串,待翻译字符串为从应用程序的源码对应的编译文件中识别得到;

显示模块1130,用于在接收到与显示关联的操作指令时,在目标语言显示文件中查找与显示关联的操作指令对应的目标文字,显示目标文字。

关于应用程序的语言转换装置的具体限定可以参见上文中对于应用程序的语言转换方法的限定,在此不再赘述。上述应用程序的语言转换装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种应用程序的语言转换方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号