CN113760246B - 应用程序文本语言处理方法、装置、电子设备及存储介质 - Google Patents
应用程序文本语言处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113760246B CN113760246B CN202111040134.2A CN202111040134A CN113760246B CN 113760246 B CN113760246 B CN 113760246B CN 202111040134 A CN202111040134 A CN 202111040134A CN 113760246 B CN113760246 B CN 113760246B
- Authority
- CN
- China
- Prior art keywords
- code
- line
- text
- target
- annotation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及数据处理技术领域,尤其涉及一种应用程序文本语言处理方法、装置、电子设备及存储介质,用于提高应用程序文本语言处理的效率。主要技术方案包括:将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;确定目标代码行中的非注释代码段;确定非注释代码段中的语言文本,语言文本为应用程序中需要输出显示的文本;将所述语言文本中的所述预置字符恢复成所述目标转义符号,得到源语言文本;将源语言文本转换为目标语言文本。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种应用程序文本语言处理方法、装置、电子设备及存储介质。
背景技术
随着国内应用程序市场的日趋饱和,应用程序布局海外成为了众多应用程序厂商的一个重要发展方向。而一款应用程序登陆海外,应用程序的本地化是必须要完成的环节。其中,应用程序的本地化包括语言的本地化,语言的本地化是将本土的应用程序文本语言转换为目标区域的文本语言。
目前,在应用程序初始设计阶段,其应用程序内会严格限制源文本语言出现的地方,有些项目会将所有源文本语言都集中到一个专门的文本池中,所有使用到文本语言的地方一律使用tid来索引,避免游戏投向海外的时,应用程序文本语言本地化的复杂。
但是,应用程序文本语言本地化在操作上往往也会面临计划赶不上变化的窘迫,甚至因为前期过于僵化的设计而在开发过程中自缚手脚,舍本逐末,影响了整个游戏的开发进度和品质。因此,如何提高应用程序文本语言处理的效率成为目前亟待解决的问题。
发明内容
有鉴于此,本申请提供一种应用程序文本语言处理方法、装置、电子设备及存储介质,用于提高应用程序文本语言处理的效率。
第一方面,本申请实施例提供一种应用程序文本语言处理方法,该方法包括:
将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定目标代码行中的非注释代码段;
确定非注释代码段中的语言文本,语言文本为应用程序中需要输出显示给用户的文本;
将所述语言文本中的所述预置字符恢复成所述目标转义符号,得到源语言文本;
将源语言文本转换为目标语言文本。
在一个可选的实施例中,在将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行之前,该方法还包括:
确程序代码文件中代码行是否存在续行符;
若程序代码文件中代码行存在续行符,则根据所述续行符对属于同一行的代码行进行合并。
在一个可选的实施例中,确定目标代码行中的非注释代码段,包括:
通过预置注释标识字符确定当前的目标代码行中是否包含注释文本;
若当前的目标代码行中不包含所述注释文本,将当前的目标代码行确定为非注释代码段,并将下一行的目标代码行确定为所述当前的目标代码行;
若当前的目标代码行中包含所述注释文本,则根据预置注释标识字符在当前的目标代码行中的位置,确定当前的目标代码行中是否包含所述非注释代码段。
在一个可选的实施例中,根据预置注释标识字符在目标代码行中的位置,确定目标代码行中是否包含非注释代码段,包括:
确定预置注释标识字符是否在当前的目标代码行中的起始位置;
若预置注释标识字符在当前的目标代码行中的起始位置,且预置注释标识字符为第一注释标识符,则确定当前的目标代码行为注释代码段,并将下一行的目标代码行确定为所述当前的目标代码行;
若预置注释标识字符不在当前的目标代码行中的起始位置,则确定当前的目标代码行中包含非注释代码段。
在一个可选的实施例中,若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:
若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且预置注释标识字符为所述第一注释标识符,将当前的目标代码行中起始位置至第一注释标识符之前位置对应的代码,确定为当前的目标代码行中的非注释代码段,将下一行的目标代码行确定为当前的目标代码行。
在一个可选的实施例中,若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:
若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且预置注释标识字符为第二注释标识符,从当前的目标代码行和/或在其后的目标代码行中,确定与第二注释标识符匹配的第三注释标识符;
将第二注释标识符和第三注释标识符之间位置的代码确定为注释代码段;
将所述当前的目标代码行中除所述注释代码段之外的代码内容确定为所述非注释代码段。
在一个可选的实施例中,将所述源代码行中与所述语言文本对应的代码内容确定为源语言文本,包括:
通过预置匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本。
在一个可选的实施例中,在将源语言文本转换为目标语言文本之前,该方法还包括:对源语言文本进行去重处理。
在一个可选的实施例中,所述源语言文本转换为目标语言文本,包括:
识别所述源语言文本中的第一语言字符和目标转义符号;
将所述第一语言字符转换为第二语言字符,以及,将所述目标转义符号转换为对应的原生符号,得到目标语言文本。
在一个可选的实施例中,所述目标转义符号包括以下至少一种:转义双引号、转义单引号和转义反斜杠。
第二方面,本申请实施例还提供一种应用程序文本语言处理方法,其特征在于,所述方法包括:
将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定所述目标代码行中的非注释代码段;
确定所述非注释代码段中的语言文本,所述语言文本为应用程序中需要输出显示的文本;
将所述目标代码行的预置字符或所述非注释代码段中的预置字符恢复成所述目标转义符号,并在恢复成目标转义符号的代码行中将所述语言文本对应的代码文本确定为源语言文本;
将所述源语言文本转换为目标语言文本。
第三方面,本申请实施例还提供一种应用程序文本语言处理装置,该装置包括:
替换模块,用于将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定模块,用于确定目标代码行中的非注释代码段;
确定模块,还用于确定非注释代码段中的语言文本,语言文本为应用程序中需要输出显示给用户的文本;
恢复模块,用于将所述语言文本中的所述预置字符恢复成所述目标转义符号,得到源语言文本;
转换模块,用于将源语言文本转换为目标语言文本。
在一个可选的实施例中,该装置还包括:合并模块;
确定模块,还用于确定程序代码文件中代码行是否存在续行符;
合并模块,用于若程序代码文件中代码行存在续行符,则根据续行符对属于同一行的代码行进行合并。
在一个可选的实施例中,确定模块,具体用于:
通过预置注释标识字符确定当前的目标代码行中是否包含注释文本;当前的目标代码行的起始位置为第一行;
若当前的目标代码行中不包含注释文本,将当前的目标代码行确定为非注释代码段,并将下一行的目标代码行确定为所述当前的目标代码行;
若当前的目标代码行中包含注释文本,则根据预置注释标识字符在当前的目标代码行中的位置,确定当前的目标代码行中是否包含非注释代码段。
在一个可选的实施例中,确定模块,具体还用于:
确定预置注释标识字符是否在当前的目标代码行中的起始位置;
若预置注释标识字符在当前的目标代码行中的起始位置,且预置注释标识字符为第一注释标识符,则确定当前的目标代码行为注释代码段,并将下一行的目标代码行确定为所述当前的目标代码行;
若预置注释标识字符不在当前的目标代码行中的起始位置,则确定当前的目标代码行中包含非注释代码段。
在一个可选的实施例中,确定模块,具体还用于:若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且所述预置注释标识字符为所述第一注释标识符,将所述当前的目标代码行中起始位置至所述第一注释标识符之前位置对应的代码,确定为所述当前的目标代码行中的非注释代码段,将下一行的目标代码行确定为当前的目标代码行。
在一个可选的实施例中,确定模块,具体还用于:若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且所述预置注释标识字符为所述第二注释标识符,从所述当前的目标代码行或在其后的目标代码行中,确定与所述第二注释标识符匹配的第三注释标识符;将所述第二注释标识符和所述第三注释标识符之间位置的代码确定为注释代码段;将所述当前的目标代码行中除所述注释代码段之外的代码内容确定为所述非注释代码段。
在一个可选的实施例中,确定模块,具体还用于:通过预置匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本。
在一个可选的实施例中,该装置还包括:去重模块,用于对源语言文本进行去重处理。
在一个可选的实施例中,所述转换模块,具体用于识别所述源语言文本中的第一语言字符和目标转义符号;将所述第一语言字符转换为第二语言字符,以及,将所述目标转义符号转换为对应的原生符号,得到目标语言文本。
在一个可选的实施例中,所述目标转义符号包括以下至少一种:转义双引号、转义单引号和转义反斜杠。
第四方面,本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,存储器存储有处理器可执行的机器可读指令,当电子设备运行时,处理器与存储器之间通过总线进行通信,机器可读指令被所述处理器运行时执行第一方面的应用程序文本语言处理方法的步骤。
第五方面,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述第一方面中的应用程序文本语言处理方法的步骤。
本申请实施例提供的一种应用程序文本语言处理方法、装置、电子设备及存储介质,首先将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行,然后确定目标代码行中的非注释代码段,并确定非注释代码段中的语言文本,语言文本为应用程序中需要输出显示给用户的文本,将语言文本中的所述预置字符恢复成所述目标转义符号,得到源语言文本,将源语言文本转换为目标语言文本。与目前应用程序设计初始阶段或开发阶段实现应用程序文本语言处理相比,本发明可以有效兼容任意代码结构的应用程序海发语言本地化需求,无论该应用程序是前期按照全球发行设计的,还是单纯国内版本先行后期改为海发,都可以实现将应用程序的源语言文本转换为目标语言文本,且转换的过程中无需对应用程序内的代码进行修改,不关心代码本身的实现,可直接基于原有的程序代码实现海外语言的本地化需求,从而提高了应用程序文本语言处理的效率。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种电子设备的结构示意图;
图2示出了本申请实施例所提供的一种应用程序文本语言处理方法的流程图;
图3示出了本申请实施例所提供的一种确定目标代码行中的非注释代码段流程图;
图4示出了本申请实施例所提供的一种确定代码行是否包含非注释代码段流程图;
图5示出了本申请实施例所提供的一种应用程序文本语言处理装置的结构框图;
图6示出了本申请实施例所提供的另一种应用程序文本语言处理装置的结构框图。
具体实施方式
本申请说明书和权利要求书及上述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于限定特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
在本申请实施例中,至少一个还可以描述为一个或多个,多个可以是两个、三个、四个或者更多个,本申请不做限制。
目前,主要通过两种方式实现应用程序文本语言的本地化。一类是在应用程序初始设计阶段,应用程序内会严格限制源文本语言出现的地方,有些项目会将所有源文本语言都集中到一个专门的文本池中,所有使用到文本语言的地方一律使用tid来索引,避免游戏投向海外的时,应用程序文本语言本地化的复杂;另一类就是应用程序开发阶段完全针对的国内市场,待应用程序上线之后,根据项目的市场反馈才决定向海外推广。
但是,完全针对全球发行的前期设计型开发模式,虽然初衷较好,但是在操作上往往也会面临计划赶不上变化的窘迫,甚至因为前期过于僵化的设计而在开发过程中自缚手脚,舍本逐末,影响了整个游戏的开发进度和品质;而优先国内,日后再本地化的开发模式,其后期的本地化方案会因为项目自身的特点而呈现高度定制化,导致每个项目海发时都要特别针对性开发,难以直接套用过去的方案,开发成本较高,开发周期亦被拉长,且质量也无法保证稳定。
鉴于此,本发明提供一种应用程序文本语言处理方法,其基本原理是:首先将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行,然后确定目标代码行中的非注释代码段,并确定非注释代码段中的语言文本,语言文本为应用程序中需要输出显示给用户的文本,将语言文本中的预置字符恢复成目标转义符号,得到源语言文本,将源语言文本转换为目标语言文本。本发明与目前应用程序设计初始阶段或开发阶段实现应用程序文本语言处理相比,可以有效兼容任意代码结构的应用程序海发语言本地化需求,无论该应用程序是前期按照全球发行设计的,还是单纯国内版本先行后期改为海发,都可以实现将应用程序的源语言文本转换为目标语言文本,且转换的过程中无需对应用程序内的代码进行修改,不关心代码本身的实现,可直接基于原有的程序代码实现海外语言本地化需求,从而提高了应用程序文本语言处理的效率。
本申请实施例提供的方案可以应用于图1所示的电子设备中,该电子设备可以包括至少一个处理器11、存储器12、显示器13、收发器14。
下面结合图2对电子设备的各个构成部件进行具体的介绍:
处理器11是终端的控制中心,可以是一个处理器,也可以是多个处理元件的统称。例如,处理器11是一个CPU,也可以是ASIC,或者是被配置成实施本申请实施例的一个或多个集成电路,例如:一个或多个DSP,或,一个或者多个FPGA。其中,处理器11可以通过运行或执行存储在存储器12内的软件程序,以及调用存储在存储器12内的数据,执行终端的各种功能。
在具体的实现中,作为一种实施例,处理器11可以包括一个或多个CPU,例如图3中所示的CPU0和CPU1。
在具体实现中,作为一种实施例,电子设备可以包括多个处理器,这些处理器中的每一个可以是一个single-CPU处理器,也可以是一个multi-CPU处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
存储器12可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器12可以是独立存在,通过通信总线与处理器11相连接。存储器12也可以和处理器11集成在一起。其中,所述存储器12用于存储执行本申请方案的软件程序,并由处理器11来控制执行。
显示器13可用于显示由处理器11转换的目标语言文本。显示器13可包括显示面板,可选的,可以采用液晶显示器(liquid crystal display,LCD)、有机发光二极管(organic light-emitting diode,OLED)等形式来配置显示面板。
收发器14,使用任何收发器一类的装置,用于与其他设备(声音传感器14)或通信网络通信,如以太网,RAN,WLAN等。收发器14可以包括接收单元实现接收功能,以及发送单元实现发送功能。
图1中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。尽管未示出,电子设备还可以包括电池、摄像头、蓝牙模块、全球定位系统(global positioning system,GPS)模块等,在此不再赘述。
如图2所示,本申请实施例提供一种应用程序文本语言处理方法,该方法可以应用于电子设备中。本申请提供的应用程序文本语言处理方法可以包括:
S201、将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行。
其中,目标转义符号可以为转义反斜杠“\\”、转义单引号“\'”和/或转义双引号“\"”等,本发明实施例不做具体限定。需要说明的是,需要说明的是,本实施例可以将不同的目标转义符号替换成不同的预置字符,如将转义反斜杠“\\”替换成预置字符“@@@”,将转义单引号“\'”替换成预置字符“&&&”,将转义双引号“\"”替换成预置字符“%%%”,本实施例不对替换的预置字符的具体形式进限定。
程序代码文件为需要转换使用语言的应用程序,该应用程序具体可以为游戏类应用、社交类应用、学习类应用等,本发明实施例不做具体限定。程序代码文件中包含多个代码行,其中可存在包含转义反斜杠、转义单引号和/或转义双引号的代码行,本发明实施例需要将转义单引号和/或转义双引号替换为预置字符,得到目标代码行;对于不存在转义单引号和/或转义双引号的代码行,则可将该代码行直接确定成目标代码行。转义单引号/双引号是为了在同类型引号对内能够保留字符串本身的引号。
在本发明实施例中,预置字符可以根据实际需求进行设定,如预置字符具体可以为@@@SINGLE_QUOTE_ESCAPE_REPLACE@@@,也可以为@@@、!!!等,本实施例不做具体限定。
在本发明提供的一个实施例中,在将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行之前,还包括:首先确定程序代码是否能够执行成功,若程序程序代码文件能够执行成功,则确定程序代码文件中代码行是否存在续行符,若程序代码文件中代码行存在续行符,则根据续行符对属于同一行的代码行进行合并。
例如,以基于python语言的游戏项目为例,当前需要处理的程序代码文件为A.py,下面以伪代码的形式阐述本实施例对A.py文件的处理。
以文本方式逐行读入A.py,伪代码如下:
编码不符合规范,记录并退出
即通过读取上述伪代码内容确定程序代码文件A.py是否能够执行成功,如果该程序代码文件A.py能够成功读取,则需要进一步的对程序代码文件A.py中属于同一行的代码进行合并,对代码行的合并处理具体可以如下所示:
对file_lines逐行进行处理,伪代码如下:
S202、确定目标代码行中的非注释代码段。
需要说明的是,程序代码文件的代码行中可包括注释代码段和/或非注释代码段,对于程序代码文件中的任何一行,在文字处理的时候首先需要判明的就是该行哪些部分位于注释当中,哪些不在注释里,只有非注释的代码才是有效代码,注释的代码里,由于实际不会运行,因此可以随意书写不符合语法规定的代码,如果不先判明哪些代码区段是注释的,而贸然去匹配文本内容,很可能会在一些情况下发生误匹配甚至错误。因此,本实施例在将程序代码文件中的代码行包含的转义单引号和/或转义双引号替换为预置字符,得到目标代码行之后,需要确定目标代码行中的非注释代码段。
在本发明实施例中,可以首先确定代码行中的注释代码段,然后基于注释代码确定非注释代码段。其中,注释代码段具体可以根据预置注释符号进行确定,如预置注释符号“#”、“”'”、“"""”、“/*”和“*/”等,本实施例不做具体限定。
需要说明的是,程序人员编写的代码行中会出现整行都是非注释代码段、整行都是注释代码段,或者代码行中的一部分是注释代码段,一部分是非注释代码段等情况,因此,本发明实施例需要基于注释符号识别出目标代码行中的注释代码段和非注释代码段,以便于在后续步骤中根据非注释代码段确定程序代码文件中的源语言文本。
S203、确定非注释代码段中的语言文本。
在本实施例中,语言文本为应用程序中需要输出显示给用户的文本,通过正则匹配确定的语言文本为应用程序使用的原始语言文本,如应用程序使用的原始语言为中文,则可对非注释代码段进行统一码(unicode)汉字区间的正则匹配,即可判定非注释代码段中是否为包含中文字符串,然后将与汉字区间匹配的中文字符确定为语言文本。
具体的,本实施例通过预置匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本。基于正则表达式对所有单引号对和双引号对进行预置匹配模式匹配,得到各自的匹配结果列表和对应引号的始末下标区间,由于已经对所有转义单引号和转义双引号进行了预处理,以及注释代码段的剔除(注释符和注释内容里可能出现大量的引号,甚至违背语法规范),因此通过预置匹配模式匹配单引号和/或双引号提取得到的文本内容都是合法有效的。
其中,预置匹配模式匹配指的是正则表达式的一种匹配方式,即短匹配模式,短匹配模式应用于:假如有一段文本,只匹配最短的可能,而不是最长。与之相对的就是长匹配模式,由于长匹配模式在匹配的过程中容易出现匹配结果不符合预期的问题,因此本实施例中采用预置匹配模式匹配。
例如,匹配的文本为text2='Computer says"no."Phone says"yes."';
若使用长匹配模式
>>>str_pat=re.compile(r'\"(.*)\"')
>>>str_pat.findall(text2)
得到的匹配结果为:['no."Phone says"yes.']
若使用短匹配模式
>>>str_pat=re.compile(r'\"(.*?)\"')
>>>str_pat.findall(text2)
得到的匹配结果为:['no.','yes.']
通过上述示例可知,由于匹配的要求是对单引号中包含的双引号中的内容进行匹配,若通过长匹配模式进行匹配,得到的结果不符合预期,因此本实施例通过短匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本,以保证提取语言文本的准确性。
需要说明的是,由于本实施例是根据预置匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本,因此需要在确定非注释代码段对应的语言文本之前将转义单引号“\'”和/或转义双引号“\"”替换为预置字符,以避免根据匹配单引号和/或双引号确定的语言文本出现错误。
例如,若TEST_STR='测试\'文本\”,则不对转义单引号“\'”替换成预置字符,则根据短匹配模式得到的语言文本为:文本\,之后得到的源语言文本为:文本\;若对转义单引号“\'”替换成预置字符,则根据短匹配模式得到的语言文本为:测试@@@文本@@@,之后得到的源语言文本为:测试\'文本\'。
另外,本实施例对转义反斜杠“\\”替换为预置字符,同样是避免确定非注释段对应的语言文本时出现错误。例如TEST_STR="测试文本A\\'测试文本B'测试文本C\n",若不对转义反斜杠“\\”替换成预置字符,则需要对转义单引号“\'”进行替换,那么得到的替换结果为:"测试文本A\@@@测试文本B'测试文本C\n",若对转义反斜杠“\\”替换成预置字符,那么得到的替换结果为:"测试文本A@@@'测试文本B'测试文本C\n"。
之后根据最短匹配模式确定:"测试文本A\@@@测试文本B'测试文本C\n"对应的语言文本为:测试文本A\@@@测试文本B'测试文本C\n;"测试文本A@@@'测试文本B'测试文本C\n"对应的语言文本为:测试文本B。可见,没有将转义反斜杠“\\”替换成预置字符显然获取的语言文本是错的,因此本实施例需要对首先出现的转义反斜杠“\\”替换为预置字符。
S204、将语言文本中的预置字符恢复成目标转义符号,得到源语言文本。
例如,程序代码文件中存在一代码行的内容为:TEST_STR='测试\'文本\”,则对该代码行中的转义单引号替换为预置字符(预置字符为@@@),得到的目标代码行为:TEST_STR='测试@@@文本@@@',进一步从目标代码行中确定出非注释代码段:TEST_STR='测试%%%文本',并对非注释代码段进行正则匹配,确定的语言文本为:测试@@@文本@@@。之后将文本语言的预置字符恢复成单引号,得到的源语言文本为:测试\'文本\'。
又例如,程序代码文件中存在一代码行的内容为:TEST_STR='测试\\文本”,则对该代码行中的转义单引号替换为预置字符(预置字符为%%%),得到的目标代码行为:TEST_STR='测试%%%文本',进一步从目标代码行中确定出非注释代码段:TEST_STR='测试%%%文本',并对非注释代码段进行正则匹配,确定的语言文本为:测试%%%文本。之后将文本语言的预置字符恢复成单引号,得到的源语言文本为:测试\\文本。
需要说明的是,由于在通过正则匹配确定非注释代码段对应的语言文本会存在重复的情况,因此本实施例需要对源语言文本进行去重处理,从而减少将源语言文本转换为目标语言文本的工作量。
S205、将源语言文本转换为目标语言文本。
目标语言文本即需要投放到海外的语言文本,具体可以为英文、日文、法文等,本实施例不做具体限定。
在本发明提供的一个实施例中,将源语言文本转换为目标语言文本,包括:识别所源语言文本中的第一语言字符和目标转义符号;将第一语言字符转换为第二语言字符,以及,将目标转义符号转换为对应的原生符号,得到目标语言文本。
其中,第一语言字符为原始语言文本中的字符,第二语言字符为目标语言文本中的字符,原生符号是目标转义符号在程序代码中所指示的符号含义。在本实施例中,通过设置不同目标转义符号对应的预置字符以及原生符号关系,可将预置字符恢复成目标转义符号对应的原生符号。例如,转义反斜杠“\\”对应的原生符号为“\”,转义反斜杠“\'”对应的原生符号为“'”,转义反斜杠“\"”对应的原生符号为“"”。
本发明实施提供的一种应用程序文本语言处理方法,首先将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行,然后确定目标代码行中的非注释代码段,并确定非注释代码段中的语言文本,语言文本为应用程序中需要输出显示给用户的文本,将语言文本中的预置字符恢复成目标转义符号,得到源语言文本,最后将源语言文本转换为目标语言文本。与目前应用程序设计初始阶段或开发阶段实现应用程序文本语言处理相比,本发明可以有效兼容任意代码结构的应用程序海发语言本地化需求,无论该应用程序是前期按照全球发行设计的,还是单纯国内版本先行后期改为海发,都可以实现将应用程序的源语言文本转换为目标语言文本,且转换的过程中无需对应用程序内的代码进行修改,不关心代码本身的实现,可直接基于原有的程序代码实现海外语言的本地化需求,从而提高了应用程序文本语言处理的效率。
如图3所示,在本发明提供的一个实施例中,确定目标代码行中的非注释代码段,包括:
S301、确定各个目标代码行在程序代码文件中对应的排列顺序。
具体的,可以通过数字表示目标代码行的排列顺序,如当前的目标代码行、第二行的目标代码行、等三行的目标代码行等,本实施例不做具体限定。
S302、通过预置注释标识字符确定当前的目标代码行中是否包含注释文本。
其中,预置注释符号可以为“#”、“”'”、“"""”、“/*”和“*/”等。具体的,可以通过查找当前的目标代码行中是否包含预置注释标识字符确定当前的目标代码行中是否包含注释文本,若当前的目标代码行中不包含预置注释符号,则确定当前的目标代码行确定为非注释代码段;若当前的目标代码行中包含预置注释符号,还需要根据预置注释符号在目标代码行中的位置,进一步确认目标代码行是否包含非注释代码段。
S303A、若当前的目标代码行中不包含注释文本,将当前的目标代码行确定为非注释代码段,并将下一行的目标代码行确定为当前的目标代码行。
在本发明实施例中,在确定当前行的目标代码行为非注释代码段之后,则直接跳转到下一行的目标代码行(即将第二行的目标代码行作为当前的目标代码行),继续判断下一行的目标代码行是否包含注释文本,即跳转到S302继续执行以下一行的目标代码行作为当前行,通过预置注释标识字符确定当前行中是否包含注释文本的步骤。
S303B、若当前的目标代码行中包含注释文本,则根据预置注释标识字符在当前的目标代码行中的位置,确定当前的目标代码行中是否包含非注释代码段。
具体的,如图4所示,根据预置注释标识字符在目标代码行中的位置,确定第一目标代码行中是否包含非注释代码段,包括:
S401、确定预置注释标识字符是否在当前的目标代码行中的起始位置。
S402、若预置注释标识字符在当前的目标代码行中的起始位置,且预置注释标识字符为第一注释标识符,则确定当前的目标代码行为注释代码段,并将下一行的目标代码行确定为当前的目标代码行。
其中,第一注释标识符可以为“#”。即若注释符号“#”在目标代码行的起始位置,则可以直接确认当前的目标代码行不包含非注释代码段,即第一行的代码都是对代码的注释内容,然后直接跳转到下一行的目标代码行(即将第二行的目标代码行作为当前的目标代码行),继续判断下一行的目标代码行是否包含注释文本,即跳转到S302继续执行以下一行的目标代码行作为当前行,通过预置注释标识字符确定当前行中是否包含注释文本的步骤。
S403、若预置注释标识字符不在当前的目标代码行中的起始位置,则确定当前的目标代码行中包含非注释代码段。
在本实施例中,若预置注释标识字符不在当前的目标代码行中的起始位置,不论预置注释标识字符的具体类型,便可以直接确定当前的目标代码行中包含非注释代码段,然后依据预置注释标识符的类型以及位置,进行一步的确认当前的目标代码中的非注释代码段,具体确定过程分以下两种情况:
第一种情况:若预置注释标识字符为第一注释标识符,则若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:将当前的目标代码行中起始位置至第一注释标识符之前位置对应的代码,确定为当前的目标代码行中的非注释代码段,并将下一行的目标代码行确定为当前的目标代码行。
例如,当前的目标代码行为:TEST_STR1='测试文本1'#"注释2",第一注释标识符为“#”,则可确定当前的目标代码行的非注释代码段为:TEST_STR1='测试文本1',即非注释代码段是从当前的目标代码行中截取的起始位置至第一注释标识符之前位置对应的代码。
第二种情况:若预置注释标识字符为第二注释标识符,则若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:从当前的目标代码行和/或在其后的目标代码行中,确定与第二注释标识符匹配的第三注释标识符;第二注释标识符和第三注释标识符之间位置的代码确定为注释代码段,将当前的目标代码行中除注释代码段之外的代码内容确定为非注释代码段,将在第三注释标识之后的第一个目标代码行确定为当前的目标代码行。
具体的,第二注释标识符可以为“”'”或“"""”,与第二注释标识符“”'”对应的第三注释标识符为位置上与第二注释标识符最为临近的“”'”,同理,与第二注释标识符“"""”对应的第三注释标识符为位置上与第二注释标识符最为临近的“"""”。
例如,当前的目标代码行为:TEST_STR3='测试文本3'"""'注释3'"注释4:全都是注释,“不会被提取”"
第二行的目标代码行为:TEST_STR4='测试文本4'
第三行的目标代码行为:"""
通过上例可知,当前的目标代码行中包含第二注释标识符“"""”,则可从第二注释标识符之后查找与其匹配的第三注释标识符,即查找与第二注释标识符“"""”最为临近的“"""”,经过查找第三注释标识符的位置在第三行的目标代码行中,然后将第二注释标识符和第三注释标识符之间的代码确定为注释代码段,最终得到当前的目标代码行中的非注释代码段为:TEST_STR3='测试文本3',第二行和第三行的目标代码行中不包含非注释代码段,之后跳转到第四行的目标代码行(即第三注释标识之后的第一个目标代码行确定为当前的目标代码行)中继续确定其是否包含非注释代码段的判断过程,直至确定出代码文件中所有的非注释代码段为止。
为了方便理解图3和图4中确定目标代码行中的非注释代码段的过程,下面以具体的程序代码文件为示例进行说明,程序代码文件为:
1#_*_coding:utu-8_*_
2
3#注释1
4 TEST_STR1='测试文本1'#"注释2"
5”'
6 TEST_STR2='测试文本2'
7”'TEST_STR3='测试文本3'"""'注释3'"注释4:全都是注释,“不会被提取”"
8 TEST_STR4='测试文本4'
9"""
10 TEST_STR5='测试文本5'
该程序代码文件被读入之后,首先会构建以下2个全局变量(初始值均为False)
within_single_quote_comment:是否处于三连单引号构成的注释中(可跨行)
within_double_quote_comment:是否处于三连双引号构成的注释中(可跨行)
第1行(#-*-coding:utf-8-*-),游标初始为0
第一步检查within_single_quote_comment和within_double_quote_comment是否有任意一个为True,如果是的话,说明当前已经处于三连引号构成的注释中,反之则以当前游标开始,搜索该行的第一个注释符(井号#或者三连引号)出现的位置。由于,within_single_quote_comment和within_double_quote_comment均为False,故需要执行的是后者,搜索发现第一个注释出现的位置就是游标0号位置,且出现的是井号#注释符,该注释符会将一整行完全注释掉,不会因为该行后续又有什么字符出现而停止注释,故第一行因为该#注释符的出现游标直接就跳至了行尾,该行处理结束,整行都是注释。
第2行是空行,游标初始为0,且已经位于行尾
第3行(#注释1)与第1行同理
第4行(TEST_STR1='测试文本1'#"注释2"),游标在每一行开始时都恢复至0
第一步检查within_single_quote_comment和within_double_quote_comment是否有任意一个为True,依然均为False,说明当前并不处于三连引号构成的注释中,以当前游标开始,搜索该行的第一个注释符(井号#或者三连引号)出现的位置,找到了井号注释符,且出现的位置与当前搜索游标并不一致,故发现了不处于注释当中的一段字符串,该字符串被返回出来(TEST_STR1='测试文本1'),游标前进到井号注释符处,因为井号注释符会将一整行完全注释掉,故游标进一步跳至行尾,该行处理完毕。
第5行(”')
第一步检查within_single_quote_comment和within_double_quote_comment是否有任意一个为True,依然均为False,说明当前并不处于三连引号构成的注释中,以当前游标开始,搜索该行的第一个注释符(井号#或者三连引号)出现的位置,找到了一组三连单引号,触发within_single_quote_comment变为True,游标由0变更到发现该三连引号的位置,三连引号已经到了该行行尾,故该行处理结束。
第6行(TEST_STR2='测试文本2')
第一步检查发现within_single_quote_comment为True,说明当前处于三连引号构成的注释中,尝试在该行内寻找配对的三连单引号,发现并未找见,三连单引号构成的注释没有结束,该行整行都被注释掉了。
第7行(”'TEST_STR3='测试文本3'"""'注释3'"注释4:全都是注释,“不会被提取”")
第一步检查发现within_single_quote_comment为True,当前处于三连引号构成的注释中,尝试在该行内寻找配对的三连单引号,在行首即发现配对的三连单引号,within_single_quote_comment恢复False,多行注释状态结束。
游标前进到该三连引号之后,以之为起点寻找下一个注释符出现的位置,搜索发现三连双引号,within_double_quote_comment置为True,当前游标到三连双引号之间的部分为非注释字符串,该字符串被返回出来(TEST_STR3='测试文本3'),游标前进到三连双引号处,由于within_double_quote_comment已经为True,故需要尝试寻找配对的三连双引号,搜索发现一直到第7行行尾也找不到,故该行剩下部分全部被注释掉。
第8行(TEST_STR4='测试文本4')与第6行同理
第9行(""")
第一步检查发现within_double_quote_comment为True,但随之搜索到与之配对的三连双引号,within_double_quote_comment置为False,多行注释状态结束。
第10行(TEST_STR5='测试文本5')
within_single_quote_comment和within_double_quote_comment均为False,以当前游标0开始,搜索该行的第一个注释符(井号#或者三连引号)出现的位置,发现至行尾也为搜到,该行整行均不处于注释内,该行文本均返回出来。
通过对上述程序代码文件的分析,最终得到的非注释代码段为:
TEST_STR1=测试文本1
TEST_STR3=测试文本3
TEST_STR5=测试文本5
本申请实施例还提供了一种应用程序文本语言处理方法,所述方法包括以下步骤:
步骤601:将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行。
步骤602:确定目标代码行中的非注释代码段。
步骤603:确定非注释代码段中的语言文本,所述语言文本为应用程序中需要输出显示的文本。
步骤604:将所述目标代码行的预置字符或所述非注释代码段中的预置字符恢复成所述目标转义符号,并在恢复成目标转义符号的代码行中将所述语言文本对应的代码文本确定为源语言文本。
步骤605:将所述源语言文本转换为目标语言文本。
其中,步骤S601-S603、S605分别与S201-S203、S205相同,这里不再赘述。
在通过步骤S603确定语言文本后,可以进一步执行步骤S604,将目标代码行的预置字符或非注释代码段中的预置字符恢复成目标转义符号,并且在恢复成目标转义符号的代码行中将与语言文本对应的代码文本确定为源语言文本。
例如,程序代码文件中存在一代码行的内容为:TEST_STR='测试\'文本\”,则对该代码行中的转义单引号替换为预置字符(预置字符为@@@),得到的目标代码行为:TEST_STR='测试@@@文本@@@',进一步从目标代码行中确定出非注释代码段:TEST_STR='测试%%%文本',并对非注释代码段进行正则匹配,确定的语言文本为:测试@@@文本@@@。之后将目标代码行TEST_STR='测试@@@文本@@@'的恢复成单引号,得到恢复成目标转义符号的代码行TEST_STR='测试\'文本\”,再从TEST_STR='测试\'文本\”中确定与语言文本对应的代码文本:测试\'文本\',得到源语言文本:测试\'文本\'。
与目前应用程序设计初始阶段或开发阶段实现应用程序文本语言处理相比,本发明可以有效兼容任意代码结构的应用程序海发语言本地化需求,无论该应用程序是前期按照全球发行设计的,还是单纯国内版本先行后期改为海发,都可以实现将应用程序的源语言文本转换为目标语言文本,且转换的过程中无需对应用程序内的代码进行修改,不关心代码本身的实现,可直接基于原有的程序代码实现海外语言的本地化需求,从而提高了应用程序文本语言处理的效率。
在一个可选的实施例中,在将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行之前,该方法还包括:
确程序代码文件中代码行是否存在续行符;
若程序代码文件中代码行存在续行符,则根据所述续行符对属于同一行的代码行进行合并。
在一个可选的实施例中,确定目标代码行中的非注释代码段,包括:
通过预置注释标识字符确定当前的目标代码行中是否包含注释文本;
若当前的目标代码行中不包含所述注释文本,将当前的目标代码行确定为非注释代码段,并将下一行的目标代码行确定为所述当前的目标代码行;
若当前的目标代码行中包含所述注释文本,则根据预置注释标识字符在当前的目标代码行中的位置,确定当前的目标代码行中是否包含所述非注释代码段。
该实施例的具体实施方式与前述内容相同,这里不再赘述。
在一个可选的实施例中,根据预置注释标识字符在目标代码行中的位置,确定目标代码行中是否包含非注释代码段,包括:
确定预置注释标识字符是否在当前的目标代码行中的起始位置;
若预置注释标识字符在当前的目标代码行中的起始位置,且预置注释标识字符为第一注释标识符,则确定当前的目标代码行为注释代码段,并将下一行的目标代码行确定为所述当前的目标代码行;
若预置注释标识字符不在当前的目标代码行中的起始位置,则确定当前的目标代码行中包含非注释代码段。
该实施例的具体实施方式与前述内容相同,这里不再赘述。
在一个可选的实施例中,若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:
若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且预置注释标识字符为所述第一注释标识符,将当前的目标代码行中起始位置至第一注释标识符之前位置对应的代码,确定为当前的目标代码行中的非注释代码段,将下一行的目标代码行确定为当前的目标代码行。
该实施例的具体实施方式与前述内容相同,这里不再赘述。
在一个可选的实施例中,若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:
若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且预置注释标识字符为第二注释标识符,从当前的目标代码行和/或在其后的目标代码行中,确定与第二注释标识符匹配的第三注释标识符;
将第二注释标识符和第三注释标识符之间位置的代码确定为注释代码段;
将所述当前的目标代码行中除所述注释代码段之外的代码内容确定为所述非注释代码段。
该实施例的具体实施方式与前述内容相同,这里不再赘述。
在一个可选的实施例中,将所述源代码行中与所述语言文本对应的代码内容确定为源语言文本,包括:
通过预置匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本。
在一个可选的实施例中,在将源语言文本转换为目标语言文本之前,该方法还包括:对源语言文本进行去重处理。
该实施例的具体实施方式与前述内容相同,这里不再赘述。
在一个可选的实施例中,所述源语言文本转换为目标语言文本,包括:
识别所述源语言文本中的第一语言字符和目标转义符号;
将所述第一语言字符转换为第二语言字符,以及,将所述目标转义符号转换为对应的原生符号,得到目标语言文本。
该实施例的具体实施方式与前述内容相同,这里不再赘述。
在一个可选的实施例中,所述目标转义符号包括以下至少一种:转义双引号、转义单引号和转义反斜杠。
该实施例的具体实施方式与前述内容相同,这里不再赘述。
本申请实施例可以根据上述方法示例对应用程序文本语言处理装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图5示出了上述和实施例中涉及的应用程序文本语言处理装置的一种可能的组成示意图,如图5所示,该应用程序文本语言处理装置可以包括:替换模块51、确定模块52、恢复模块53、转换模块54。
替换模块51,用于将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定模块52,用于确定目标代码行中的非注释代码段;
确定模块52,还用于通过正则匹配确定非注释代码段对应的语言文本;
恢复模块53,用于将所述语言文本中的所述预置字符恢复成所述目标转义符号,得到源语言文本;
转换模块54,用于将源语言文本转换为目标语言文本。
另一方面,本申请实施例还提供了一种应用程序文本语言处理装置,如图5所示,该应用程序文本语言处理装置可以包括:替换模块51、确定模块52、恢复模块53、转换模块54:
替换模块51,将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定模块52,确定所述目标代码行中的非注释代码段;
确定模块52,确定所述非注释代码段中的语言文本,所述语言文本为应用程序中需要输出显示的文本;
恢复模块53,将所述目标代码行的预置字符或所述非注释代码段中的预置字符恢复成所述目标转义符号,并在恢复成目标转义符号的代码行中将所述语言文本对应的代码文本确定为源语言文本;
转换模块54,将所述源语言文本转换为目标语言文本。
进一步可选的,如图5所示,该应用程序文本语言处理装置还可以包括:合并模块55。
在一种可能的实现方式中,确定模块52,还用于确定程序代码文件中代码行是否存在续行符;
合并模块55,用于若程序代码文件中代码行存在续行符,则根据续行符对属于同一行的代码行进行合并。
在一种可能的实现方式中,确定模块52,具体用于:
通过预置注释标识字符确定当前的目标代码行中是否包含注释文本;当前的目标代码行的起始位置为第一行;
若当前的目标代码行中不包含注释文本,将当前的目标代码行确定为非注释代码段,并将下一行的目标代码行确定为当前的目标代码行;
若当前的目标代码行中包含注释文本,则根据预置注释标识字符在当前的目标代码行中的位置,确定当前的目标代码行中是否包含非注释代码段。
在一种可能的实现方式中,确定模块52,具体还用于:
确定预置注释标识字符是否在当前的目标代码行中的起始位置;
若预置注释标识字符在当前的目标代码行中的起始位置,且预置注释标识字符为第一注释标识符,则确定当前的目标代码行为注释代码段,并将下一行的目标代码行确定为当前的目标代码行;
若预置注释标识字符不在当前的目标代码行中的起始位置,则确定当前的目标代码行中包含非注释代码段。
在一种可能的实现方式中,确定模块52,具体还用于:若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且所述预置注释标识字符为所述第一注释标识符,将所述当前的目标代码行中起始位置至所述第一注释标识符之前位置对应的代码,确定为所述当前的目标代码行中的非注释代码段,将下一行的目标代码行确定为当前的目标代码行。
在一个可选的实施例中,确定模块52,具体还用于:若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且所述预置注释标识字符为所述第二注释标识符,从所述当前的目标代码行或在其后的目标代码行中,确定与所述第二注释标识符匹配的第三注释标识符;将所述第二注释标识符和所述第三注释标识符之间位置的代码确定为注释代码段;将所述当前的目标代码行中除所述注释代码段之外的代码内容确定为所述非注释代码段。
在一个可选的实施例中,确定模块52,具体还用于:通过预置匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本。
在一个可选的实施例中,该装置还包括:
去重模块56,用于对源语言文本进行去重处理。
在一个可选的实施例中,所述转换模块54,具体用于识别所述源语言文本中的第一语言字符和目标转义符号;将所述第一语言字符转换为第二语言字符,以及,将所述目标转义符号转换为对应的原生符号,得到目标语言文本。
在一个可选的实施例中,所述目标转义符号包括以下至少一种:转义双引号、转义单引号和转义反斜杠。
基于同一申请构思,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述实施例提供的应用程序文本语言处理方法的步骤。
具体地,所述存储介质能够为通用的存储介质,如移动磁盘、硬盘等,所述存储介质上的计算机程序被运行时,能够执行上述应用程序文本语言处理方法,本发明可以有效兼容任意代码结构的应用程序海发语言本地化需求,无论该应用程序是前期按照全球发行设计的,还是单纯国内版本先行后期改为海发,都可以实现将应用程序的源语言文本转换为目标语言文本,且转换的过程中无需对应用程序内的代码进行修改,不关心代码本身的实现,可直接基于原有的程序代码实现海外语言的本地化需求,从而提高了应用程序文本语言处理的效率。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应所述理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者所述技术方案的部分可以以软件产品的形式体现出来,所述计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (14)
1.一种应用程序文本语言处理方法,其特征在于,所述方法包括:
将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定所述目标代码行中的非注释代码段;
确定所述非注释代码段中的语言文本,所述语言文本为应用程序中需要输出显示的文本;
将所述语言文本中的所述预置字符恢复成所述目标转义符号,得到源语言文本;
将所述源语言文本转换为目标语言文本。
2.根据权利要求1所述的方法,其特征在于,在将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行之前,所述方法还包括:
确定所述程序代码文件中代码行是否存在续行符;
若所述程序代码文件中代码行存在续行符,则根据所述续行符对属于同一行的代码行进行合并。
3.根据权利要求1所述的方法,其特征在于,所述确定所述目标代码行中的非注释代码段,包括:
通过预置注释标识字符确定当前的目标代码行中是否包含注释文本,当前的目标代码行的起始位置为第一行;
若所述当前的目标代码行中不包含所述注释文本,将所述当前的目标代码行确定为所述非注释代码段,并将下一行的目标代码行确定为所述当前的目标代码行;
若所述当前的目标代码行中包含所述注释文本,则根据所述预置注释标识字符在所述当前的目标代码行中的位置,确定所述当前的目标代码行中是否包含所述非注释代码段。
4.根据权利要求3所述的方法,其特征在于,所述根据所述预置注释标识字符在所述当前的目标代码行中的位置,确定所述当前的目标代码行中是否包含所述非注释代码段,包括:
确定所述预置注释标识字符是否在所述当前的目标代码行中的起始位置;
若所述预置注释标识字符在所述当前的目标代码行中的起始位置,且所述预置注释标识字符为第一注释标识符,则确定所述当前的目标代码行为注释代码段,并将下一行的目标代码行确定为当前的目标代码行;
若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段。
5.根据权利要求4所述的方法,其特征在于,若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:
若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且所述预置注释标识字符为所述第一注释标识符,将所述当前的目标代码行中起始位置至所述第一注释标识符之前位置对应的代码,确定为所述当前的目标代码行中的非注释代码段,将下一行的目标代码行确定为当前的目标代码行。
6.根据权利要求4所述的方法,其特征在于,若所述预置注释标识字符不在所述当前的目标代码行中的起始位置,则确定所述当前的目标代码行中包含所述非注释代码段,包括:
若所述预置注释标识字符不在所述当前的目标代码行中的起始位置且所述预置注释标识字符为第二注释标识符,从所述当前的目标代码行或在其后的目标代码行中,确定与所述第二注释标识符匹配的第三注释标识符;
将所述第二注释标识符和所述第三注释标识符之间位置的代码确定为注释代码段;
将所述当前的目标代码行中除所述注释代码段之外的代码内容确定为所述非注释代码段。
7.根据权利要求1所述的方法,其特征在于,所述确定所述非注释代码段中的语言文本,包括:
通过预置匹配模式匹配单引号和/或双引号,确定非注释代码段对应的语言文本。
8.根据权利要求1所述的方法,其特征在于,在将所述源语言文本转换为目标语言文本之前,所述方法还包括:
对所述源语言文本进行去重处理。
9.根据权利要求1所述的方法,其特征在于,将所述源语言文本转换为目标语言文本,包括:
识别所述源语言文本中的第一语言字符和目标转义符号;
将所述第一语言字符转换为第二语言字符,以及,将所述目标转义符号转换为对应的原生符号,得到目标语言文本。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述目标转义符号包括以下至少一种:转义双引号、转义单引号和转义反斜杠。
11.一种应用程序文本语言处理方法,其特征在于,所述方法包括:
将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定所述目标代码行中的非注释代码段;
确定所述非注释代码段中的语言文本,所述语言文本为应用程序中需要输出显示的文本;
将所述目标代码行的预置字符或所述非注释代码段中的预置字符恢复成所述目标转义符号,并在恢复成目标转义符号的代码行中将所述语言文本对应的代码文本确定为源语言文本;
将所述源语言文本转换为目标语言文本。
12.一种应用程序文本语言处理装置,其特征在于,所述装置包括:
替换模块,用于将程序代码文件中的代码行包含的目标转义符号替换为预置字符,得到目标代码行;
确定模块,用于确定所述目标代码行中的非注释代码段;
所述确定模块,还用于确定所述非注释代码段中的语言文本,所述语言文本为应用程序中需要输出显示给用户的文本;
恢复模块,用于将所述语言文本中的所述预置字符恢复成所述目标转义符号,得到源语言文本;
转换模块,用于将所述源语言文本转换为目标语言文本。
13.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行如权利要求1至11任一所述的应用程序文本语言处理方法的步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至11任一所述的应用程序文本语言处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111040134.2A CN113760246B (zh) | 2021-09-06 | 2021-09-06 | 应用程序文本语言处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111040134.2A CN113760246B (zh) | 2021-09-06 | 2021-09-06 | 应用程序文本语言处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113760246A CN113760246A (zh) | 2021-12-07 |
CN113760246B true CN113760246B (zh) | 2023-08-11 |
Family
ID=78793210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111040134.2A Active CN113760246B (zh) | 2021-09-06 | 2021-09-06 | 应用程序文本语言处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113760246B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114239562B (zh) * | 2021-12-27 | 2024-10-11 | 沈阳哲航信息科技有限公司 | 文档中程序代码块的识别方法、装置和设备 |
CN116661794B (zh) * | 2023-04-21 | 2024-04-05 | 合芯科技有限公司 | 一种硬件描述语言语义转换方法及装置 |
Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1248024A (zh) * | 1999-07-06 | 2000-03-22 | 汪文虎 | 采用译码的汉字检索方法 |
JP2001209547A (ja) * | 2000-01-24 | 2001-08-03 | Natl Inst Of Advanced Industrial Science & Technology Meti | ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置 |
FR2812102A1 (fr) * | 2000-07-18 | 2002-01-25 | Tradweb | Procede et systeme pour la traduction linguistique |
US6389385B1 (en) * | 1999-07-02 | 2002-05-14 | International Business Machines Corporation | System and method for translating source code |
EP1315086A1 (en) * | 2001-11-27 | 2003-05-28 | Sun Microsystems, Inc. | Generation of localized software applications |
CN1799046A (zh) * | 2004-04-30 | 2006-07-05 | 微软公司 | 用于文档处理的方法和装置 |
CN101667118A (zh) * | 2008-09-02 | 2010-03-10 | 华为技术有限公司 | 多语言版本的开发、替换方法及装置 |
CN104346153A (zh) * | 2013-07-31 | 2015-02-11 | 国际商业机器公司 | 用于翻译应用程序的文本信息的方法和系统 |
CN106575166A (zh) * | 2014-08-11 | 2017-04-19 | 张锐 | 手写输入字符的处理、数据拆分和合并及编解码处理方法 |
WO2017181856A1 (zh) * | 2016-04-18 | 2017-10-26 | 中兴通讯股份有限公司 | 一种应用国际化方法、装置及终端 |
EP3392782A1 (en) * | 2017-04-18 | 2018-10-24 | Salesforce.com, Inc. | Natural language translation and localization |
CN109271168A (zh) * | 2018-08-09 | 2019-01-25 | 上海鲸鱼机器人科技有限公司 | 一种代码转换方法、装置及设备、存储介质 |
CN109635251A (zh) * | 2018-10-16 | 2019-04-16 | 平安普惠企业管理有限公司 | 应用的文本转换方法、装置、设备及存储介质 |
CN110471666A (zh) * | 2019-07-18 | 2019-11-19 | 五八有限公司 | 代码自动转换方法和装置、代码转换器及介质 |
US10528329B1 (en) * | 2017-04-27 | 2020-01-07 | Intuit Inc. | Methods, systems, and computer program product for automatic generation of software application code |
CN111240781A (zh) * | 2020-01-07 | 2020-06-05 | 杭州涂鸦信息技术有限公司 | 一种客户端多语言动态配置方法及系统 |
CN112507737A (zh) * | 2020-12-22 | 2021-03-16 | 航天科工网络信息发展有限公司 | 一种基于标签的文本翻译系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170286103A1 (en) * | 2016-03-31 | 2017-10-05 | Ca, Inc. | Identifying and correlating semantic bias for code evaluation |
US10489513B2 (en) * | 2017-04-19 | 2019-11-26 | Salesforce.Com, Inc. | Web application localization |
US10691434B2 (en) * | 2018-02-09 | 2020-06-23 | Macrosoft, Inc. | System and method for converting a first programming language application to a second programming language application |
US10936825B1 (en) * | 2019-07-19 | 2021-03-02 | Clrv Technologies, Llc | Methods and apparatus to improve disambiguation and interpretation in automated text analysis using transducers applied on a structured language space |
-
2021
- 2021-09-06 CN CN202111040134.2A patent/CN113760246B/zh active Active
Patent Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6389385B1 (en) * | 1999-07-02 | 2002-05-14 | International Business Machines Corporation | System and method for translating source code |
CN1248024A (zh) * | 1999-07-06 | 2000-03-22 | 汪文虎 | 采用译码的汉字检索方法 |
JP2001209547A (ja) * | 2000-01-24 | 2001-08-03 | Natl Inst Of Advanced Industrial Science & Technology Meti | ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置 |
FR2812102A1 (fr) * | 2000-07-18 | 2002-01-25 | Tradweb | Procede et systeme pour la traduction linguistique |
EP1315086A1 (en) * | 2001-11-27 | 2003-05-28 | Sun Microsystems, Inc. | Generation of localized software applications |
CN1799046A (zh) * | 2004-04-30 | 2006-07-05 | 微软公司 | 用于文档处理的方法和装置 |
CN101667118A (zh) * | 2008-09-02 | 2010-03-10 | 华为技术有限公司 | 多语言版本的开发、替换方法及装置 |
CN104346153A (zh) * | 2013-07-31 | 2015-02-11 | 国际商业机器公司 | 用于翻译应用程序的文本信息的方法和系统 |
CN106575166A (zh) * | 2014-08-11 | 2017-04-19 | 张锐 | 手写输入字符的处理、数据拆分和合并及编解码处理方法 |
WO2017181856A1 (zh) * | 2016-04-18 | 2017-10-26 | 中兴通讯股份有限公司 | 一种应用国际化方法、装置及终端 |
EP3392782A1 (en) * | 2017-04-18 | 2018-10-24 | Salesforce.com, Inc. | Natural language translation and localization |
US10528329B1 (en) * | 2017-04-27 | 2020-01-07 | Intuit Inc. | Methods, systems, and computer program product for automatic generation of software application code |
CN109271168A (zh) * | 2018-08-09 | 2019-01-25 | 上海鲸鱼机器人科技有限公司 | 一种代码转换方法、装置及设备、存储介质 |
CN109635251A (zh) * | 2018-10-16 | 2019-04-16 | 平安普惠企业管理有限公司 | 应用的文本转换方法、装置、设备及存储介质 |
CN110471666A (zh) * | 2019-07-18 | 2019-11-19 | 五八有限公司 | 代码自动转换方法和装置、代码转换器及介质 |
CN111240781A (zh) * | 2020-01-07 | 2020-06-05 | 杭州涂鸦信息技术有限公司 | 一种客户端多语言动态配置方法及系统 |
CN112507737A (zh) * | 2020-12-22 | 2021-03-16 | 航天科工网络信息发展有限公司 | 一种基于标签的文本翻译系统 |
Non-Patent Citations (1)
Title |
---|
loctool;iLib-js;《https://github.com/iLib-js/loctool/tree/bc877040a5d9687150b6909ac96eacfc319fec71》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113760246A (zh) | 2021-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Padró et al. | Freeling 3.0: Towards wider multilinguality | |
US9633010B2 (en) | Converting data into natural language form | |
Purdom | A sentence generator for testing parsers | |
CN113760246B (zh) | 应用程序文本语言处理方法、装置、电子设备及存储介质 | |
US8706476B2 (en) | Natural language processing method by analyzing primitive sentences, logical clauses, clause types and verbal blocks | |
CN112016304A (zh) | 文本纠错方法、装置、电子设备及存储介质 | |
US20150142825A1 (en) | Converting procedural text to an actionable knowledge form | |
CN111079408B (zh) | 一种语种识别方法、装置、设备及存储介质 | |
CN102959538B (zh) | 给文档编索引 | |
US20240311432A1 (en) | System and method for search discovery | |
US7941311B2 (en) | System and method for linguistic collation | |
CN113282854A (zh) | 数据请求响应方法、装置、电子设备及存储介质 | |
Pârtachi et al. | Posit: Simultaneously tagging natural and programming languages | |
Zhang et al. | Automated Root Causing of Cloud Incidents using In-Context Learning with GPT-4 | |
CN114548082A (zh) | 一种语法解析方法、设备和可读存储介质 | |
GB2513348A (en) | Translation validation | |
CN116756382A (zh) | 检测敏感字符串的方法、装置、设置及存储介质 | |
CN110543641A (zh) | 一种中外文信息对比方法及装置 | |
Masciolini et al. | Towards automatically extracting morphosyntactical error patterns from L1-L2 parallel dependency treebanks | |
CN111581950B (zh) | 同义名称词的确定方法和同义名称词的知识库的建立方法 | |
CN114896469A (zh) | 一种正则表达式引擎的构造方法、装置、存储介质及设备 | |
Verulkar et al. | Transliterated search of Hindi lyrics | |
Chen et al. | Extracting grammatical error corrections from wikipedia revision history | |
Greenfield et al. | Open source natural language processing | |
JP5159657B2 (ja) | 複数種類の読み仮名を有する漢字含み文字列の誤変換を指摘する誤変換指摘装置及びその方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |