CN113342436A - 一种游戏翻译方法和装置 - Google Patents
一种游戏翻译方法和装置 Download PDFInfo
- Publication number
- CN113342436A CN113342436A CN202110649513.5A CN202110649513A CN113342436A CN 113342436 A CN113342436 A CN 113342436A CN 202110649513 A CN202110649513 A CN 202110649513A CN 113342436 A CN113342436 A CN 113342436A
- Authority
- CN
- China
- Prior art keywords
- game
- function
- code logic
- interface
- logic
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
- G06F9/454—Multi-language systems; Localisation; Internationalisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/40—Processing or translation of natural language
- G06F40/58—Use of machine translation, e.g. for multi-lingual retrieval, for server-side translation for client devices or for real-time translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种游戏翻译方法和装置,所述方法包括:通过运行模拟器在终端设备提供目标操作系统;响应针对模拟器中的目标游戏程序图标的触发操作,控制在目标操作系统中运行目标游戏程序;确定目标游戏程序中的目标文件;在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过具有翻译功能的代码逻辑对游戏界面中的原始文本信息进行翻译以得到目标文本信息;通过第二界面文本设置代码逻辑根据目标文本信息展示相应的游戏界面。基于容器化以及通用翻译的技术,对UI文本设置的代码逻辑进行改写替换,在游戏界面文本展示环节实现基于所设置的具有翻译功能的代码逻辑实现对游戏原始文本的翻译,保证游戏翻译的可维护性以及全面性。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种游戏翻译方法和一种游戏翻译装置。
背景技术
Unity 3D是Unity公司开发的一个游戏引擎,目前市场上有大量游戏是基于该游戏引擎开发的,其中部分国外游戏的游戏界面不存在对中文语言的支持,这使得母语环境为中文的使用人群在运行游戏时具有一定的使用门槛,且使得游戏开发人员和设计人员在借鉴和学习国外游戏时具有一定程度上的阻碍。
在相关的游戏翻译技术中,主要是对游戏语言资源包中的语言资源进行人工翻译实现,具体为人工提取和翻译语言资源,然后把翻译后的语言资源重新打包为语言资源包,再通过游戏的运行加载达到游戏翻译或汉化的目的。然而,由于语言资源包的格式的未公开,涉及到的对语言资源包的修改需要特定的人工操作进行打包与解包,由于格式的不公开以及升级变动,语言资源包的格式容易出现兼容问题,且语言资源包里面对语言资源条目组织的文件格式不统一,需要对特定的游戏写特定的逻辑,通用性比较差。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种游戏翻译方法和相应的一种游戏翻译装置。
本发明实施例公开了一种游戏翻译方法,所述方法包括:
通过运行模拟器在终端设备提供目标操作系统,其中,所述模拟器为配置于所述终端设备上的应用程序;
响应针对所述模拟器中的目标游戏程序图标的触发操作,控制在所述目标操作系统中运行目标游戏程序;
确定所述目标游戏程序中的目标文件,其中,所述目标文件中包括第一界面文本设置代码逻辑;
在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过所述具有翻译功能的代码逻辑对所述游戏界面中的原始文本信息进行翻译以得到目标文本信息;
通过第二界面文本设置代码逻辑根据所述目标文本信息展示相应的游戏界面。
可选地,所述模拟器具有对所述目标游戏程序中游戏逻辑的控制功能,所述在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,包括:
通过对所述游戏逻辑的控制功能,采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑。
可选地,所述通过对所述游戏逻辑的控制功能,采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑,包括:
在运行所述目标游戏程序的过程中,通过对所述游戏逻辑的控制功能拦截针对所述目标游戏程序的动态链接库的动态库打开函数;所述动态库打开函数用于加载目标游戏程序在运行过程中的游戏逻辑函数库;
基于对所述游戏逻辑函数库加载的拦截操作,对所述目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,并采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑。
可选地,所述拦截针对所述目标游戏程序的动态链接库的动态库打开函数,包括:
获取针对所述动态库打开函数的函数信息;所述函数信息包括函数符号信息和函数的位置信息;
根据所述函数符号信息和所述函数的位置信息确定所述动态库打开函数在预设内存中的指向地址;所述指向地址存在目标游戏程序运行过程中采用所述动态库打开函数加载的游戏逻辑函数库;
对所述目标游戏程序运行过程中游戏逻辑函数库的加载进行拦截操作。
可选地,所述动态库打开函数加载的游戏逻辑函数库包括用于第一界面文本设置的接口函数;
所述对所述目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,并采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑,包括:
确定第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置,根据所述代码逻辑位置对所述第一界面文本设置的接口函数进行拦截操作;
在所述代码逻辑位置,将所述第一界面文本设置的接口函数指向改写后的代码逻辑;所述改写后的代码逻辑包括位于第一界面文本设置代码逻辑之前的具有翻译功能的代码逻辑和所述第一界面文本设置代码逻辑。
可选地,所述确定第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置,包括:
在拦截所述游戏逻辑函数库的加载的情况下,获取针对所述目标游戏进程的动态链接库的动态库查找函数,采用所述动态库查找函数获取预设接口调用函数;
采用所述接口调用函数,在第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置中确定需要修改的代码逻辑位置。
可选地,所述通过所述具有翻译功能的代码逻辑对所述游戏界面中的原始文本信息进行翻译以得到目标文本信息,包括:
通过对所述游戏逻辑的控制功能,对所述需要修改的代码逻辑位置的代码逻辑进行拦截操作;
将在所述需要修改的代码逻辑位置的代码逻辑替换为具有翻译功能的代码逻辑,并备份替换前的第二界面文本设置代码逻辑;
运行所述具有翻译功能的代码逻辑对原始文本信息进行翻译。
本发明实施例还公开了一种游戏翻译装置,所述装置包括:
目标操作系统提供模块,用于通过运行模拟器在终端设备提供目标操作系统,其中,所述模拟器为配置于所述终端设备上的应用程序;
游戏程序运行模块,用于响应针对所述模拟器中的目标游戏程序图标的触发操作,控制在所述目标操作系统中运行目标游戏程序;
目标文件确定模块,用于确定所述目标游戏程序中的目标文件,其中,所述目标文件中包括第一界面文本设置代码逻辑;
原始文本信息翻译模块,用于在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过所述具有翻译功能的代码逻辑对所述游戏界面中的原始文本信息进行翻译以得到目标文本信息;
界面文本展示模块,用于通过第二界面文本设置代码逻辑根据所述目标文本信息展示相应的游戏界面。
可选地,所述模拟器具有对所述目标游戏程序中游戏逻辑的控制功能,所述原始文本信息翻译模块包括:代码逻辑改写子模块,用于通过对所述游戏逻辑的控制功能,采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑。
可选地,所述代码逻辑改写子模块包括:
动态库打开函数拦截单元,用于在运行所述目标游戏程序的过程中,通过对所述游戏逻辑的控制功能拦截针对所述目标游戏程序的动态链接库的动态库打开函数;所述动态库打开函数用于加载目标游戏程序在运行过程中的游戏逻辑函数库;
代码逻辑改写单元,用于基于对所述游戏逻辑函数库加载的拦截操作,对所述目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,并采用所述具有翻译功能的代码逻辑改写所述目标游戏程序中第一界面文本设置的代码逻辑。
可选地,所述动态库打开函数拦截单元包括:
打开函数信息获取子单元,用于获取针对所述动态库打开函数的函数信息;所述函数信息包括函数符号信息和函数的位置信息;
函数指向地址确定子单元,用于根据所述函数符号信息和所述函数的位置信息确定所述动态库打开函数在预设内存中的指向地址;所述指向地址存在目标游戏程序运行过程中采用所述动态库打开函数加载的游戏逻辑函数库;
游戏逻辑加载拦截子单元,用于对所述目标游戏程序在运行过程中游戏逻辑函数库的加载进行拦截操作。
可选地,所述动态库打开函数加载的游戏逻辑函数库包括第一界面文本设置的接口函数;所述代码逻辑改写单元包括:
接口函数拦截子单元,用于确定第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置,根据所述代码逻辑位置对所述第一界面文本设置的接口函数进行拦截操作;
函数指向改写子单元,用于在所述代码逻辑位置,将所述第一界面文本设置的接口函数指向改写后的代码逻辑;所述改写后的代码逻辑包括位于第一界面文本设置代码逻辑之前的具有翻译功能的代码逻辑和所述第一界面文本设置代码逻辑。
可选地,所述原始文本信息翻译模块包括:
代码逻辑拦截子模块,用于通过对所述游戏逻辑的控制功能,对所述需要修改的代码逻辑位置的代码逻辑进行拦截操作;
代码逻辑替换子模块,用于将在所述需要修改的代码逻辑位置的代码逻辑替换为具有翻译功能的代码逻辑;
代码逻辑备份子模块,用于备份替换前的第二界面文本设置代码逻辑;
原始文本信息翻译子模块,用于运行所述具有翻译功能的代码逻辑对原始文本信息进行翻译。
本发明实施例还公开了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器运行时实现如任一项所述游戏翻译方法的步骤。
本发明实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器运行时实现如任一项所述游戏翻译方法的步骤。
本发明实施例包括以下优点:
在本发明实施例中,可以在通过运行模拟器所提供的目标操作系统上运行目标游戏程序,在目标游戏程序的第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过具有翻译功能的代码逻辑对游戏界面中的原始文本信息进行翻译,然后再通过第二界面文本设置代码逻辑根据目标文本信息展示相应的游戏界面,实现在运行游戏程序时对游戏界面文本的翻译和展示。基于容器化以及通用翻译的技术,通过对UI文本设置的代码逻辑进行改写替换,在游戏界面文本展示环节实现基于所设置的具有翻译功能的代码逻辑实现对游戏原始文本的翻译;通过对UI文本设置相关的API进行hook,理论上可以覆盖所有的基于IL2CPP的Unity3D游戏,不用针对特定的游戏特定的逻辑处理,在降低因语言障碍带来的游戏使用门槛的同时,保证游戏翻译的可维护性以及全面性。
附图说明
图1是本发明的一种游戏翻译方法实施例的步骤流程图;
图2是本发明实施例中所运行的模拟器与目标游戏程序的关系示意图;
图3是本发明的另一种游戏翻译方法实施例的步骤流程图;
图4是本发明实施例中游戏翻译的应用流程示意图;
图5是本发明的一种游戏翻译装置实施例的结构框图;
图6是本发明实施例的一种计算机可读存储介质的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
为便于本领域技术人员理解本发明,下面对本发明下述各实施例中涉及到的术语或名词做出解释:
Unity 3D:指的是Unity公司开发的一个游戏引擎,可以相当于一种多平台的综合型游戏开发工具,其可以让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容;
Hook:是一种对计算机内存里面函数调用点的修改替换操作;
Inline hook:一种特定的hook技术,只对函数实现点的内存进行改写替换的操作;
API:Application Interface,是操作系统或者后台应用提供的一种软件调用服务;
SO:全称Shared Object,动态共享库,是一种计算机共享公共逻辑代码的技术;
IL2CPP:全称Intermediate Language to C++,是Unity公司开发的一种脚本后端,其可以把C#语言脚本代码转化为C++代码编译运行,提升游戏运行效率和安全;
Android:安卓系统,指的是谷歌公司开发的一款流行的移动操作系统;
Windows:是微软公司开发的一款广泛使用的桌面操作系统;
DLL:Dynamic Link Library,可以是由微软公司开发的在Windows操作系统使用的动态链接库的一种实现。
计算机软件界面使用以及显示的语言,具体可以来源于一个单独的语言资源包,该语言资源包里面可以包含有一种或者多种语言。而在软件运行时,可以加载语言资源包,并根据软件的特定逻辑规则使用相应的语言在软件界面上进行展示,给用户提供软件的使用操作指引。
当计算机软件为Unity 3D游戏引擎所开发的游戏软件时,目前对游戏软件的翻译或者汉化,可以通过对语言资源包的人工翻译实现,具体为采用开源的Unity3D资源修改工具或者工具库,人工提取和翻译语言资源(包括文本、图片等),然后把翻译后的语言资源重新打包为语言资源包,再通过游戏的运行加载达到游戏翻译或汉化的目的。
然而上述通过对语言资源包的人工操作实现游戏翻译或汉化的方式,可能存在以下缺点:(1)由于格式的不公开以及升级变动,语言资源包的格式容易出现兼容问题;(2)同时语言资源包里面对语言资源条目组织的文件格式不统一,需要对特定的游戏写特定的逻辑,通用性比较差;(3)由于游戏可能有一套对语言资源包的完整性校验的机制,还需要考虑绕过这个检测机制的方法;(4)由于处理的仅仅是语言资源包,从众多的游戏资源包里面找到语言资源包需要额外的操作,同时许多游戏的UI语言并不是全部都在可以提取的语言资源包里面,有可能是内嵌在代码里面,翻译或者汉化的结果是不够全面的,在游戏里面的表现是很多菜单或者界面没有成功翻译或者汉化,依然会有语言障碍方面的使用门槛;(5)方案的维护性比较差,每次游戏升级或者变动,都需要重新处理新版本的语言资源包。
本发明实施例的核心思想之一是基于容器化以及通用翻译的技术,提供比较通用的Unity3D游戏汉化或者翻译技术,具体通过对UI文本设置相关的API进行hook,理论上可以覆盖所有的基于IL2CPP的Unity3D游戏,不用针对特定的游戏特定的逻辑处理,在降低因语言障碍带来的游戏使用门槛的同时,保证游戏翻译的可维护性以及全面性。
参照图1,示出了本发明的一种游戏翻译方法实施例的步骤流程图,侧重于对游戏翻译方法的使用过程,具体可以包括如下步骤:
步骤101,通过运行模拟器在终端设备提供目标操作系统;
通常,游戏程序的发布和运行可以以二进制程序的形式实现,二进制程序的部分内容可以包括代码段和数据段,在对游戏程序进行发布时,代码段和初始化/未初始化的数据段可以被载入到内存中,以便后续在游戏程序运行时,计算机或者虚拟机能够读取载入内存中代码段的可执行内容,实现运行该程序。其中,代码段包含的是计算机可以理解并执行的二进制数据,代码段所包含的二进制数据可以用于决定程序所具有的功能以及程序的表现。
在本发明实施例中,对语言资源包的人工操作实现游戏翻译或汉化的方式具有局限性以及非通用性,此时可以在不用修改游戏语言资源包的前提下,实现对游戏界面文本的翻译。
在本发明的一种实施例中,可以对游戏程序中的代码逻辑进行处理,代码段所包含的二进制数据可以用于决定程序所具有的功能以及程序的表现,而程序运行的功能以及其表现可以通过调用操作系统或者虚拟机的API达到目的,那么对代码逻辑的处理,其本质上可以是对libdl.so库以及IL2CPP相关API进行处理。在具体实现中,需要对libdl.so库以及IL2CPP相关API进行处理,此时可以在Android平台上基于容器化技术,使得游戏程序运行在一个比较独立的,且能够使得游戏程序所需调用的API处于可控制的沙盒环境,那么此时可以在终端设备上运行模拟器以提供此目标操作系统。
在终端设备中,所运行的模拟器可以用于模拟操作系统的运行环境,即所提供的目标操作系统可以为所模拟的操作系统的运行环境,其可以为后续所运行的目标游戏程序提供封闭的环境,且使得目标操作系统能够支持对游戏逻辑的控制功能,进而可以通过目标操作系统对游戏程序所需调用的系统接口函数进行控制。
步骤102,响应针对模拟器中的目标游戏程序图标的触发操作,控制在目标操作系统中运行目标游戏程序;
其中,模拟器可以为配置于终端设备上的应用程序,具体的,应用程序在运行时,能够通过容器化技术提供游戏逻辑可控的操作环境。
在本发明的一种实施例中,模拟器所提供的目标操作环境能够为后续运行的目标游戏程序提供封闭的环境,此时可以控制在目标操作系统中运行目标游戏程序,以通过目标操作系统所具有的游戏逻辑控制功能对所运行的目标游戏程序进行控制。
作为一种示例,在终端设备上配置为模拟器的应用程序可以为游戏加速器,加速器可以是一种免安装的应用程序,该应用程序中可以包括多个游戏程序图标,并在加速器界面上展示给用户,在用户双击使用加速器,并在验证成功后可以直接通过触发操作选择其中一个游戏程序图标进行加速,所选择加速的游戏程序图标即为被触发的目标游戏程序。
参照图2,示出了本发明实施例中所运行的模拟器与目标游戏程序的关系示意图,假设所配置的为模拟器的应用程序为游戏加速器Android客户端,其可以运行在终端设备上,且能够为终端设备提供封闭的目标操作系统,假设所选择加速的游戏程序为待运行的目标游戏程序,在本发明实施例中需要在所搭建的沙盒环境中运行游戏程序,此时可以在游戏加速器客户端提供目标操作系统,以便在通过加速器客户端对待翻译的目标游戏程序进行加速运行时能够实现在容器化沙盒环境中运行游戏进程。其中,容器化沙盒环境可以通过游戏加速器Android客户端采用容器化技术进行搭建。
步骤103,确定目标游戏程序中的目标文件;
对目标游戏程序中的代码逻辑进行处理,具体的,可以对用于设置游戏界面文本的代码逻辑进行处理,目标文件中可以包括第一界面文本设置代码逻辑,所确定的第一界面文本设置代码逻辑可以指的是目标游戏程序中用于设置游戏界面文本的代码逻辑。
步骤104,在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过具有翻译功能的代码逻辑对游戏界面中的原始文本信息进行翻译以得到目标文本信息;
在本发明的一种实施例中,在目标操作系统中运行目标游戏程序时,可以对目标游戏程序的第一界面文本设置代码逻辑进行设置,具体在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,以使得能够通过具有翻译功能的代码逻辑对游戏界面文本进行翻译。
其中,所设置的具有翻译功能的代码逻辑可以位于第一界面文本设置代码逻辑之前。
在具体实现中,游戏程序运行的功能以及其表现可以通过调用操作系统或者虚拟机的API达到目的,在本发明实施例中可以由程序调用UI组件文本设置的API实现,即在UI组件文本设置的API逻辑部分的开始,插入的一段具有翻译功能的代码逻辑,可以使得在软件UI的语言展示环节,能够通过所插入的翻译功能的代码逻辑获取到游戏程序的原始文本信息,将原始文本信息的原始语言通过机器翻译加部分人工校对得到翻译后的语言得到目标文本信息,然后展示在游戏程序的游戏界面中。其中,代码逻辑所采用的机器翻译可以实现对软件UI原始语言翻译的实时性,以及基于部分人工校对环节在一定程度上保证翻译的准确度。
步骤105,通过第二界面文本设置代码逻辑根据目标文本信息展示相应的游戏界面。
在运行具有翻译功能的代码逻辑对目标游戏程序的原始文本信息进行翻译之后,可以运行第二界面文本设置逻辑代码展示翻译后的目标文本信息,实现对游戏进程界面文本的翻译和展示。
在实际应用中,根据对游戏逻辑的控制功能和具有翻译功能的代码逻辑展示翻译后的界面文本,具体可以通过对游戏逻辑的控制功能,对需要修改的代码逻辑位置的代码逻辑进行拦截操作,此时可以获取在需要修改的代码逻辑位置进行替换的具有翻译功能的代码逻辑,并备份修改替换前的代码逻辑,此时所备份的修改替换前的代码逻辑即为第二界面文本设置代码逻辑,然后运行在第一界面文本设置代码逻辑中设置的具有翻译功能的代码逻辑对界面文本进行翻译,并通过采用备份的第二界面文本设置代码逻辑展示翻译后的界面文本。
在本发明实施例中,可以在在通过运行模拟器所提供的目标操作系统上运行目标游戏程序,在目标游戏程序的第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过具有翻译功能的代码逻辑对游戏界面中的原始文本信息进行翻译,然后再通过第二界面文本设置代码逻辑根据目标文本信息展示相应的游戏界面,实现在运行游戏程序时对游戏界面文本的翻译和展示。基于容器化以及通用翻译的技术,通过对UI文本设置的代码逻辑进行改写替换,在游戏界面文本展示环节实现基于所设置的具有翻译功能的代码逻辑实现对游戏原始文本的翻译;通过对UI文本设置相关的API进行hook,理论上可以覆盖所有的基于IL2CPP的Unity3D游戏,不用针对特定的游戏特定的逻辑处理,在降低因语言障碍带来的游戏使用门槛的同时,保证游戏翻译的可维护性以及全面性。
参照图3,示出了本发明的另一种游戏翻译方法实施例的步骤流程图,侧重于游戏翻译方法的技术实现过程,具体可以包括如下步骤:
步骤301,通过配置于终端设备上的应用程序搭建针对游戏程序的沙盒环境在本发明的一种实施例中,为了使得游戏程序所需调用的API处于应用程序可控制的沙盒环境,可以通过配置在终端设备上的应用程序搭建沙盒环境。
其中,预先搭建的沙盒环境可以由安卓应用程序已实现通过容器化技术实现,可以指的是供Unity 3D游戏运行的容器化环境,其可以是通过软件的方式进行模拟的操作系统的运行环境。在所搭建的沙盒环境中,其游戏进程中所需的系统API调用均需要经过一层中转,即系统API的调用处于一种可控的状态,所以可以对一些关键的C库函数的API,比如dlopen(为动态链接库的使用函数,其可以用于打开动态链接库)进行hook操作(即拦截操作)。
作为一种示例,在Android系统中,配置于终端设备上的应用程序所预先搭建的容器化环境,即沙盒环境,可以使用VirtualApp的容器化实现。
步骤202,在运行目标游戏程序的过程中,通过对游戏逻辑的控制功能拦截针对目标游戏程序的动态链接库的动态库打开函数;
在实际应用中,在应用程序通过容器化技术搭建沙盒环境,即提供封闭的目标操作环境之后,可以在预先搭建的容器化环境中加载和运行Unity 3D游戏,使得待翻译的目标Unity 3D游戏程序可以运行在一个由容器化初始化的、可控制的系统当中,使得应用程序可以对目标游戏程序运行过程中所运行的游戏逻辑的进行控制,进而可以通过对运行目标游戏程序所需调用的系统接口函数进行控制。
其中,在Unity3D游戏程序启动的过程中,需要根据Android应用程序框架的设计加载系统库,所加载的系统库可以为动态链接库,以通过所加载的动态链接库实现游戏进程的游戏逻辑,动态链接库的加载可以通过动态库打开函数dlopen函数实现,即动态库打开函数可以用于对游戏程序运行过程中游戏逻辑函数库的加载。
需要说明的是,所加载的动态链接库可以包括libdl.so,libc.so,libc++.so,libandroid.so等,对此,本发明实施例不加以限制。
在本发明的一种实施例中,通过在预先搭建的容器化环境中,游戏逻辑的实现需要基于对动态链接库的使用,为了实现对目标游戏程序运行过程中游戏逻辑的控制,此时可以从根本上对游戏逻辑进行控制,即对用于打开动态库的动态库打开函数进行拦截操作,进行拦截后续游戏进程所需使用的动态链接库,以使得能够实现对运行游戏进程所需调用的系统接口函数的拦截。
作为一种示例,假设后续的游戏逻辑的so库可以通过动态库打开函数dlopen进行加载,即dlopen函数是位于libdl.so里面的,即此时可以在libdl.so函数库进行拦截,对libdl.so函数库的拦截,其本质上是对libdl.so库里面加载后续游戏逻辑SO的dlopen函数的拦截。
在实际应用中,拦截目标游戏程序的动态链接库的动态库打开函数dlopen的过程,可以通过动态库打开函数dlopen的函数信息实现。
具体的,可以获取针对动态库打开函数的函数信息,函数信息可以包括函数符号信息和函数的位置信息,此时可以根据函数符号信息和函数的位置信息确定动态库打开函数在预设内存中的指向地址,动态库打开函数在预设内存中的指向地址存在游戏进程在运行过程中采用动态库打开函数加载的游戏逻辑函数,此时可以对目标游戏程序运行过程中游戏逻辑函数库的加载进行拦截操作。
作为一种示例,假设dlopen函数位于libdl.so,可以获取dlopen函数符号,并读取dlopen函数函数符号在libdl.so文件的相对位置,具体可以通过函数符号静态扫描分析实现,然后可以计算得到函数符号dlopen在游戏进程内存的具体地址,即动态库打开函数在预设内存中的指向地址,此时可以对所获取到的具体指向地址,使用inline hook技术hook住动态库打开函数dlopen在后续运行游戏逻辑时需要dlopen加载的SO,使得需要dlopen加载的SO处于容器化的应用程序的可控状态下,即使得动态库打开函数在预设内存的指向地址中,所存在的游戏进程在运行过程中所需采用动态库打开函数加载的游戏逻辑函数,处于可控状态下。
步骤203,基于对游戏逻辑函数库加载的拦截操作,对目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,并采用具有翻译功能的代码逻辑改写第一界面文本设置代码逻辑。
Inline hook是一种较为高级的hook手段,其可以通过直接修改运行时内存的方式替换代码逻辑,完全手工的hook及跳回操作,理论上可以实现任意位置的hook。然而,目标游戏程序是成段地缓存在预设内存中,手动把若干代码逻辑插入到某个位置可能会改动游戏程序的内存结构,此时需要对内存地址重定位才能正常运行游戏程序,为了保持目标游戏程序的内存结构不变,此时可以采用对代码逻辑进行替换的方式,而不是采用直接插入的方式来实现hook,即改写代码逻辑。具体的,在对动态库打开函数进行拦截的情况下,可以实现对游戏逻辑函数库加载的拦截操作,即其所拦截的dlopen函数里面可以拦截到libil2cpp.so关于游戏所有逻辑(包括但不限于渲染、事件、网络等)的函数库的加载,那么此时可以对目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,以便采用具有翻译功能的代码逻辑改写第一界面文本设置代码逻辑。
在本发明的一种实施例中,动态库打开函数加载的游戏逻辑函数库可以包括第一界面文本设置的接口函数,此时可以通过对游戏逻辑函数库加载的拦截操作,实现对游戏进程中第一界面文本设置的接口函数的拦截操作,并采用具有翻译功能的代码逻辑改写目标游戏程序中第一界面文本设置代码逻辑,以便能够在游戏UI的语言展示环境实现对界面文本的翻译。
具体的,步骤203可以包括如下子步骤:
子步骤S11,确定第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置,根据代码逻辑位置对第一界面文本设置的接口函数进行拦截操作;
在实际应用中,可以在拦截游戏逻辑函数库的加载的情况下,获取针对目标游戏程序的动态链接库的动态库查找函数,采用动态库查找函数获取预设接口调用函数,然后可以采用接口调用函数,在第一界面文本设置位于内存代码段的代码逻辑位置中确定需要修改的代码逻辑位置。
对于第一界面文本设置的接口函数的拦截操作,首先需要对第一界面文本设置的接口函数进行获取,即获取游戏里面关于文本控件里面关于文本设置操作的API,具体可以通过dlsym以及inline hook的方式,对IL2CPP脚本后端的API进行hook操作,可以获取到游戏里面关于文本控件里面关于文本设置操作的API,比如Text.set_text等。
作为一种示例,dlopen当中拦截到libil2cpp.so的加载后,可以通过dlsym获取libil2cpp.so当中的一些公开的API调用,然后通过上述公开的API获取到文本控件Text.set_text在内存的位置。
子步骤S12,在代码逻辑位置,将第一界面文本设置的接口函数指向改写后的代码逻辑。
其中,改写后的代码逻辑可以包括位于用第一界面文本设置代码逻辑之前的具有翻译功能的代码逻辑和第一界面文本设置代码逻辑。
在改写第一文本界面设置代码逻辑,并跳转到所hook的代码逻辑(即改写后的代码逻辑)执行之后,往往还需要保留调用原方法的能力以保证游戏程序的功能可用性,其中还可以通过hook方法中的跳转指令来调回原方法继续执行,调回前需要先补充执行目标方法已被替换的原始指令,保证原方法完整性。
在实际应用中,可以通过对所述游戏逻辑的控制功能,对需要修改的代码逻辑位置的代码逻辑进行拦截操作,将在目标游戏程序运行的过程中位于内存代码段的需要修改的代码逻辑位置的代码逻辑替换为具有翻译功能的代码逻辑,并备份修改替换前的代码逻辑,所备份的代码逻辑可以为第二界面文本设置代码逻辑;然后运行具有翻译功能的代码逻辑对界面的原始文本信息进行翻译,并采用备份的第二界面文本设置代码逻辑在界面显示目标文本信息。
作为一种示例,可以对上述获取到的Text.set_text的内存位置进行inlinehook,替换成一段具有翻译功能的代码逻辑,同时备份Text.set_text原来的逻辑(即第二界面文本设置代码逻辑),当需要界面文本展示时,可以获取需要展示的原始界面文本,根据字符集的范围判断是需要翻译的界面文本,使用查表或者调用翻译API对原始界面文本进行翻译得到翻译后的界面文本,那么此时可以调用备份中原来的Text.set_text把翻译后的界面文本设置到UI控件里面,最终达到翻译或者汉化的目的。
需要说明的是,由于调用的是备份的Text.set_text逻辑,此时可以保证翻译之后的界面文本能够正常地设置到UI控件中,并最终成功展示在游戏的UI界面;且对于内嵌在代码里面的界面文本,由于也是通过UI控件Text.set_text经过上述过程展示的,此时内嵌在代码里面的界面文本也可以达到翻译汉化的效果,即可以实现理论上在UI界面上展示的界面文本的翻译或者汉化;以及展示在UI界面上的界面文本为单个句子或者词条文本,无需对游戏语言资源词条进行格式分析,便捷且可操作性强,由于未对语言资源包进行改动,此时也无需额外考虑游戏对语言资源包的完整性校验机制。
在本发明实施例中,基于容器化以及通用翻译的技术,通过对UI文本设置相关的API进行hook,理论上可以覆盖所有的基于IL2CPP的Unity3D游戏,不用针对特定的游戏特定的逻辑处理,在降低因语言障碍带来的游戏使用门槛的同时,保证游戏翻译的可维护性以及全面性。
为了便于本领域技术人员进一步了解本发明实施例所提出的游戏翻译方法,下面结合游戏翻译方法的应用流程进行说明。
参照图4,示出了本发明实施例中游戏翻译的应用流程示意图,具体可以通过在应用程序通过容器化技术所提供的目标操作系统,即在预先搭建的沙盒环境中运行目标游戏程序实现。
在容器化的封闭环境运行目标游戏程序的实现中,可以分为游戏进程运行前和游戏进程运行。
在目标游戏程序运行前,可以对容器化环境进行准备,可以准备能够供Unity3D游戏运行的沙盒环境,具体可以通过软件的方式(例如模拟器,其可以是配置于终端设备上的应用程序)模拟操作系统的运行环境实现,在所搭建的沙盒环境中,其目标游戏程序所需的系统API调用均需要经过一层中转,即系统API的调用可以处于可控的状态。
此时可通过加速器客户端响应针对游戏程序图标的触发操作,确定用户所选择的其中一游戏软件,并对与所触发的游戏程序图标相应的目标游戏程序进行加速,所选择加速的游戏为待翻译的目标游戏程序,即待翻译的目标Unity3D游戏程序。
在目标游戏程序运行过程中,可以在预先准备的容器化环境中加载运行Unity3D游戏,使待翻译的目标Unity3D游戏程序运行在由容器化初始化的、可控制的系统进程中。
对待翻译的目标Unity3D游戏程序的可控制,可以表现在Unity3D目标游戏程序启动的过程中,hook动态链接库,例如libdl.so库里面用于加载后续游戏逻辑SO的dlopen函数,进而可以对后续游戏逻辑的SO进行符号分析获取以及hook操作;在hook的dlopen函数里面可以拦截到libil2cpp.so关于游戏所有逻辑(包括但不限于渲染、事件、网络等)的函数库的加载,此时通过dlsym以及inline hook的方式,对IL2CPP脚本后端的API进行hook操作,并基于获取到的IL2CPPAPI以及inline hook技术,获取到游戏里面关于文本控件里面关于文本设置操作的API,比如Text.set_text等,然后在基于上述hook的Text.set_text函数(即第一界面文本设置代码逻辑)里面,当需要对界面文本进行展示时,采用在第一界面文本设置代码逻辑中设置的具有翻译功能的代码逻辑对所需要展示的界面文本进行翻译,得到翻译后的界面文本,并调用原来的Text.set_text(即第二界面文本设置代码逻辑)把翻译后的界面文本设置到UI控件里面,最终达到翻译或者汉化的目的。
需要说明的是,本发明实施例的具体可以基于Android平台实现,在Windows平台上同样可以使用DLLProxy技术方案代替容器化的部分拦截游戏逻辑动态库的加载,通过类似的流程实现对界面文本的汉化或者翻译,对此,本发明实施例不加以限制。
在本发明一种优选的实施例中,容器化环境的实现可能具有许多不可控的因素,例如系统升级或者系统API改动,导致容器化的沙盒环境对运行于其上面的Unity3D游戏兼容性较差。在一种替代方案下,可以使用虚拟化技术代替容器化,具体为完全使用软件模拟一个全新的Android运行环境,类似Android开发工具里面的模拟器,在该模拟器中所有的API均参考Android标准实现,解决上述Unity3D游戏运行时遇到的部分兼容问题;在另一种替代方案下,可以使用重新打包、重新签名游戏包的方式代替容器化,具体可以通过单独的SO注入翻译汉化逻辑,该方案所获取的是修改过的游戏软件包,当其安装后运行在实际的Android系统当中,引入的兼容性问题几乎为零。
在本发明实施例中,基于容器化以及通用翻译的技术,通过对UI文本设置的代码逻辑进行改写替换,在游戏界面文本展示环节实现基于所设置的具有翻译功能的代码逻辑实现对游戏原始文本的翻译;以及通过对libdl.so库以及IL2CPP相关API的hook操作,在不用修改游戏包的前提下,实现了一种通用的游戏翻译技术。理论上可以覆盖所有的基于IL2CPP的Unity3D游戏,不用针对特定的游戏特定的逻辑处理,在降低因语言障碍带来的游戏使用门槛的同时,保证游戏翻译的可维护性以及全面性。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图5,示出了本发明的一种游戏翻译装置实施例的结构框图,具体可以包括如下模块:
目标操作系统提供模块501,用于通过运行模拟器在终端设备提供目标操作系统,其中,所述模拟器为配置于所述终端设备上的应用程序;
游戏程序运行模块502,用于响应针对所述模拟器中的目标游戏程序图标的触发操作,控制在所述目标操作系统中运行目标游戏程序;
目标文件确定模块503,用于确定所述目标游戏程序中的目标文件,其中,所述目标文件中包括第一界面文本设置代码逻辑;
原始文本信息翻译模块504,用于在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过所述具有翻译功能的代码逻辑对所述游戏界面中的原始文本信息进行翻译以得到目标文本信息;
界面文本展示模块505,用于通过第二界面文本设置代码逻辑根据所述目标文本信息展示相应的游戏界面。
在本发明的一种实施例中,所述模拟器具有对所述目标游戏程序中游戏逻辑的控制功能,原始文本信息翻译模块504可以包括如下子模块:
代码逻辑改写子模块,用于通过对所述游戏逻辑的控制功能,采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑。
在本发明的一种实施例中,代码逻辑改写子模块以包括如下单元:
动态库打开函数拦截单元,用于在运行所述目标游戏程序的过程中,通过对所述游戏逻辑的控制功能拦截针对所述目标游戏程序的动态链接库的动态库打开函数;所述动态库打开函数用于加载目标游戏程序在运行过程中的游戏逻辑函数库;
代码逻辑改写单元,用于基于对所述游戏逻辑函数库加载的拦截操作,对所述目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,并采用所述具有翻译功能的代码逻辑改写所述目标游戏程序中第一界面文本设置的代码逻辑。
在本发明的一种实施例中,动态库打开函数拦截单元可以包括如下子单元:
打开函数信息获取子单元,用于获取针对所述动态库打开函数的函数信息;所述函数信息包括函数符号信息和函数的位置信息;
函数指向地址确定子单元,用于根据所述函数符号信息和所述函数的位置信息确定所述动态库打开函数在预设内存中的指向地址;所述指向地址存在目标游戏程序运行过程中采用所述动态库打开函数加载的游戏逻辑函数库;
游戏逻辑加载拦截子单元,用于对所述目标游戏程序在运行过程中游戏逻辑函数库的加载进行拦截操作。
在本发明的一种实施例中,所述动态库打开函数加载的游戏逻辑函数库包括第一界面文本设置的接口函数;代码逻辑改写单元可以包括如下子单元:
接口函数拦截子单元,用于确定第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置,根据所述代码逻辑位置对所述第一界面文本设置的接口函数进行拦截操作;
函数指向改写子单元,用于在所述代码逻辑位置,将所述第一界面文本设置的接口函数指向改写后的代码逻辑;所述改写后的代码逻辑包括位于第一界面文本设置代码逻辑之前的具有翻译功能的代码逻辑和所述第一界面文本设置代码逻辑。
在本发明的一种实施例中,原始文本信息翻译模块可以包括如下子模块:
代码逻辑拦截子模块,用于通过对所述游戏逻辑的控制功能,对所述需要修改的代码逻辑位置的代码逻辑进行拦截操作;
代码逻辑替换子模块,用于将在所述需要修改的代码逻辑位置的代码逻辑替换为具有翻译功能的代码逻辑;
代码逻辑备份子模块,用于备份替换前的第二界面文本设置代码逻辑;
原始文本信息翻译子模块,用于运行所述具有翻译功能的代码逻辑对原始文本信息进行翻译。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,包括:
包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,该计算机程序被处理器运行时实现上述游戏翻译方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器运行时实现上述游戏翻译方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
参照图6,示出了本发明实施例的一种计算机可读存储介质的结构框图,该计算机可读存储介质601上可以存储计算机程序,其中,计算机程序可以被处理器执行时实现上述游戏翻译方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器运行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上运行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上运行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种游戏翻译方法和一种游戏翻译装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种游戏翻译方法,其特征在于,所述方法包括:
通过运行模拟器在终端设备提供目标操作系统,其中,所述模拟器为配置于所述终端设备上的应用程序;
响应针对所述模拟器中的目标游戏程序图标的触发操作,控制在所述目标操作系统中运行目标游戏程序;
确定所述目标游戏程序中的目标文件,其中,所述目标文件中包括第一界面文本设置代码逻辑;
在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过所述具有翻译功能的代码逻辑对所述游戏界面中的原始文本信息进行翻译以得到目标文本信息;
通过第二界面文本设置代码逻辑根据所述目标文本信息展示相应的游戏界面。
2.根据权利要求1所述的方法,其特征在于,所述模拟器具有对所述目标游戏程序中游戏逻辑的控制功能,所述在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,包括:通过对所述游戏逻辑的控制功能,采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑。
3.根据权利要求1所述的方法,其特征在于,所述通过对所述游戏逻辑的控制功能,采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑,包括:
在运行所述目标游戏程序的过程中,通过对所述游戏逻辑的控制功能拦截针对所述目标游戏程序的动态链接库的动态库打开函数;所述动态库打开函数用于加载目标游戏程序在运行过程中的游戏逻辑函数库;
基于对所述游戏逻辑函数库加载的拦截操作,对所述目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,并采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑。
4.根据权利要求3所述的方法,其特征在于,所述拦截针对所述目标游戏程序的动态链接库的动态库打开函数,包括:
获取针对所述动态库打开函数的函数信息;所述函数信息包括函数符号信息和函数的位置信息;
根据所述函数符号信息和所述函数的位置信息确定所述动态库打开函数在预设内存中的指向地址;所述指向地址存在目标游戏程序运行过程中采用所述动态库打开函数加载的游戏逻辑函数库;
对所述目标游戏程序运行过程中游戏逻辑函数库的加载进行拦截操作。
5.根据权利要求3所述的方法,其特征在于,所述动态库打开函数加载的游戏逻辑函数库包括用于第一界面文本设置的接口函数;
所述对所述目标游戏程序中第一界面文本设置代码逻辑的加载进行拦截操作,并采用所述具有翻译功能的代码逻辑改写所述第一界面文本设置代码逻辑,包括:
确定第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置,根据所述代码逻辑位置对所述第一界面文本设置的接口函数进行拦截操作;
在所述代码逻辑位置,将所述第一界面文本设置的接口函数指向改写后的代码逻辑;所述改写后的代码逻辑包括位于第一界面文本设置代码逻辑之前的具有翻译功能的代码逻辑和所述第一界面文本设置代码逻辑。
6.根据权利要求5所述的方法,其特征在于,所述确定第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置,包括:
在拦截所述游戏逻辑函数库的加载的情况下,获取针对所述目标游戏进程的动态链接库的动态库查找函数,采用所述动态库查找函数获取预设接口调用函数;
采用所述接口调用函数,在第一界面文本设置代码逻辑位于内存代码段的代码逻辑位置中确定需要修改的代码逻辑位置。
7.根据权利要求6所述的方法,其特征在于,所述通过所述具有翻译功能的代码逻辑对所述游戏界面中的原始文本信息进行翻译以得到目标文本信息,包括:
通过对所述游戏逻辑的控制功能,对所述需要修改的代码逻辑位置的代码逻辑进行拦截操作;
将在所述需要修改的代码逻辑位置的代码逻辑替换为具有翻译功能的代码逻辑,并备份替换前的第二界面文本设置代码逻辑;
运行所述具有翻译功能的代码逻辑对原始文本信息进行翻译。
8.一种游戏翻译装置,其特征在于,所述装置包括:
目标操作系统提供模块,用于通过运行模拟器在终端设备提供目标操作系统,其中,所述模拟器为配置于所述终端设备上的应用程序;
游戏程序运行模块,用于响应针对所述模拟器中的目标游戏程序图标的触发操作,控制在所述目标操作系统中运行目标游戏程序;
目标文件确定模块,用于确定所述目标游戏程序中的目标文件,其中,所述目标文件中包括第一界面文本设置代码逻辑;
原始文本信息翻译模块,用于在第一界面文本设置代码逻辑中设置具有翻译功能的代码逻辑,通过所述具有翻译功能的代码逻辑对所述游戏界面中的原始文本信息进行翻译以得到目标文本信息;
界面文本展示模块,用于通过第二界面文本设置代码逻辑根据所述目标文本信息展示相应的游戏界面。
9.一种电子设备,其特征在于,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器运行时实现如权利要求1-7中任一项所述游戏翻译方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器运行时实现如权利要求1至7中任一项所述游戏翻译方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110649513.5A CN113342436B (zh) | 2021-06-10 | 2021-06-10 | 一种游戏翻译方法和装置 |
PCT/CN2022/077576 WO2022257503A1 (zh) | 2021-06-10 | 2022-02-24 | 一种游戏翻译方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110649513.5A CN113342436B (zh) | 2021-06-10 | 2021-06-10 | 一种游戏翻译方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113342436A true CN113342436A (zh) | 2021-09-03 |
CN113342436B CN113342436B (zh) | 2023-03-17 |
Family
ID=77476590
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110649513.5A Active CN113342436B (zh) | 2021-06-10 | 2021-06-10 | 一种游戏翻译方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113342436B (zh) |
WO (1) | WO2022257503A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022257503A1 (zh) * | 2021-06-10 | 2022-12-15 | 网易(杭州)网络有限公司 | 一种游戏翻译方法和装置 |
CN115688816A (zh) * | 2023-01-04 | 2023-02-03 | 赤子城网络技术(北京)有限公司 | 翻译模型文字的方法及相关设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000029964A1 (en) * | 1998-11-15 | 2000-05-25 | Lingocom, Ltd. | Software language translation system and method |
CN1364260A (zh) * | 1999-07-28 | 2002-08-14 | 国际商业机器公司 | 软件翻译的内省编辑器系统、程序和方法 |
US6721941B1 (en) * | 1996-08-27 | 2004-04-13 | Compuware Corporation | Collection of timing and coverage data through a debugging interface |
CN101523348A (zh) * | 2006-10-02 | 2009-09-02 | 特兰斯蒂有限公司 | 针对程序代码转换处理动态链接的函数调用的方法和设备 |
US20140281376A1 (en) * | 2013-03-12 | 2014-09-18 | Koichi Yamada | Creating An Isolated Execution Environment In A Co-Designed Processor |
CN104536955A (zh) * | 2014-12-24 | 2015-04-22 | 深圳熙谷威生物医疗科技有限公司 | Pc机配置机器语言、字库以及翻译文件的方法及系统 |
CN109960511A (zh) * | 2019-03-22 | 2019-07-02 | 北京智游网安科技有限公司 | 基于虚拟化技术的动态库下发方法、存储介质及智能终端 |
CN110134404A (zh) * | 2019-04-12 | 2019-08-16 | 深圳壹账通智能科技有限公司 | 代码翻译方法、装置、计算机设备和存储介质 |
CN111160045A (zh) * | 2019-12-27 | 2020-05-15 | 苏州亿歌网络科技有限公司 | 一种游戏资源文件翻译方法、装置及设备 |
CN111723002A (zh) * | 2020-05-18 | 2020-09-29 | 五八有限公司 | 一种代码调试方法、装置、电子设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030236658A1 (en) * | 2002-06-24 | 2003-12-25 | Lloyd Yam | System, method and computer program product for translating information |
US7577561B2 (en) * | 2004-11-09 | 2009-08-18 | Sony Online Entertainment Llc | System and method for generating a target language markup language text template |
CN101201821A (zh) * | 2006-12-13 | 2008-06-18 | 英业达股份有限公司 | 文字信息翻译方法 |
CN103309647A (zh) * | 2012-03-08 | 2013-09-18 | 鸿富锦精密工业(深圳)有限公司 | 应用程序多语言支持系统及方法 |
CN113342436B (zh) * | 2021-06-10 | 2023-03-17 | 网易(杭州)网络有限公司 | 一种游戏翻译方法和装置 |
-
2021
- 2021-06-10 CN CN202110649513.5A patent/CN113342436B/zh active Active
-
2022
- 2022-02-24 WO PCT/CN2022/077576 patent/WO2022257503A1/zh active Application Filing
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6721941B1 (en) * | 1996-08-27 | 2004-04-13 | Compuware Corporation | Collection of timing and coverage data through a debugging interface |
WO2000029964A1 (en) * | 1998-11-15 | 2000-05-25 | Lingocom, Ltd. | Software language translation system and method |
CN1364260A (zh) * | 1999-07-28 | 2002-08-14 | 国际商业机器公司 | 软件翻译的内省编辑器系统、程序和方法 |
CN101523348A (zh) * | 2006-10-02 | 2009-09-02 | 特兰斯蒂有限公司 | 针对程序代码转换处理动态链接的函数调用的方法和设备 |
US20140281376A1 (en) * | 2013-03-12 | 2014-09-18 | Koichi Yamada | Creating An Isolated Execution Environment In A Co-Designed Processor |
CN104536955A (zh) * | 2014-12-24 | 2015-04-22 | 深圳熙谷威生物医疗科技有限公司 | Pc机配置机器语言、字库以及翻译文件的方法及系统 |
CN109960511A (zh) * | 2019-03-22 | 2019-07-02 | 北京智游网安科技有限公司 | 基于虚拟化技术的动态库下发方法、存储介质及智能终端 |
CN110134404A (zh) * | 2019-04-12 | 2019-08-16 | 深圳壹账通智能科技有限公司 | 代码翻译方法、装置、计算机设备和存储介质 |
CN111160045A (zh) * | 2019-12-27 | 2020-05-15 | 苏州亿歌网络科技有限公司 | 一种游戏资源文件翻译方法、装置及设备 |
CN111723002A (zh) * | 2020-05-18 | 2020-09-29 | 五八有限公司 | 一种代码调试方法、装置、电子设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022257503A1 (zh) * | 2021-06-10 | 2022-12-15 | 网易(杭州)网络有限公司 | 一种游戏翻译方法和装置 |
CN115688816A (zh) * | 2023-01-04 | 2023-02-03 | 赤子城网络技术(北京)有限公司 | 翻译模型文字的方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2022257503A1 (zh) | 2022-12-15 |
CN113342436B (zh) | 2023-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9588870B2 (en) | Time travel debugging for browser components | |
US9471553B2 (en) | Automatically rendering web or hybrid applications natively | |
US20200026750A1 (en) | Systems and Methods for Hosted Applications | |
Taivalsaari et al. | Web browser as an application platform | |
CN113342436B (zh) | 一种游戏翻译方法和装置 | |
Ratabouil | Android NDK: beginner's guide | |
US10747510B1 (en) | Application runtime modification | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
WO2022083316A1 (zh) | 一种应用运行的方法、装置及计算机存储介质 | |
US9286142B2 (en) | Methods and systems for supporting a rendering API using a runtime environment | |
US20200057654A1 (en) | Method and system for mirror image package preparation and application operation | |
US10761835B1 (en) | Run-time application modification | |
WO2015014143A1 (en) | Method and apparatus for cross-platform application conversion | |
CN103885814A (zh) | 在x86架构上运行ARM APK的模拟器装置和方法 | |
CN108089870B (zh) | 用于修复应用的方法和装置 | |
CN116401003A (zh) | 基于桌面操作系统的安卓应用运行方法、系统及存储介质 | |
US10268647B2 (en) | Asset catalog layered image support | |
US9841982B2 (en) | Locating import class files at alternate locations than specified in classpath information | |
CN113342437B (zh) | 一种软件翻译方法和装置 | |
Smyth | Android Studio 3.0 Development Essentials-Android 8 Edition | |
CN111382076B (zh) | 应用程序的测试方法、装置、电子设备及计算机存储介质 | |
Parsons et al. | The java story | |
CN113590224B (zh) | 服务器的检测方法、装置、电子设备及存储介质 | |
Vavru et al. | Android programming: Complete application programming guide | |
Kwon et al. | Lightweight migration for web applications with framework separation |
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 |