CN1885265A - 在无需修改源代码的情况下本地化java gui应用的系统和方法 - Google Patents
在无需修改源代码的情况下本地化java gui应用的系统和方法 Download PDFInfo
- Publication number
- CN1885265A CN1885265A CNA200510080938XA CN200510080938A CN1885265A CN 1885265 A CN1885265 A CN 1885265A CN A200510080938X A CNA200510080938X A CN A200510080938XA CN 200510080938 A CN200510080938 A CN 200510080938A CN 1885265 A CN1885265 A CN 1885265A
- Authority
- CN
- China
- Prior art keywords
- gui
- gui assembly
- assembly
- translation
- class
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种将软件应用的源语言用户界面本地化成目标语言用户界面的方法和系统。该方法包括:在软件应用使用源语言用户界面运行时,从该软件应用的字节码中提取出源语言GUI组件文字,将提取出的源语言GUI组件文字形成一个本地化包文件,将所述本地化包文件中的源语言GUI组件文字翻译成目标语言,再次运行该软件应用时,从翻译的本地化包文件中加载翻译后的GUI组件文字;以及将翻译成目标语言的GUI组件显示在显示屏幕上。通过使用本发明,能够在不知道源代码的情况下本地化JAVA GUI应用,从而为用户使用不是用自己的母语编写的JAVA GUI应用带来了方便。
Description
技术领域
本发明涉及与图形用户界面有关的技术,更具体地说,本发明涉及在不需要知道源代码和进行重构的情况下对JAVA GUI应用进行本地化的系统和方法。
背景技术
JAVA GUI应用使用图形组件作为图形用户界面(GUI),以便于与用户进行交互。JAVA GUI组件包括按钮、菜单、文本字段、复选框、下拉列表以及其他常见的图形控件。AWT(Abstract WindowToolkit)和Swing是目前普遍使用的两种JAVA GUI框架,它们都包括了所有上述组件,并且能使开发者通过把GUI组件放置在窗口面板中来编写应用。
很多JAVA GUI应用只支持英语作为用户界面语言,因而为非英语国家或地区的人们使用这些应用带来了困难。针对这个问题的一个可能的解决办法是重新编写应用,将与语言相关的字符串提取到一个单独的本地化包中,对该本地化包进行翻译,随后通过重新构建、重新编译等过程使得能够在用户界面窗口中显示翻译后的文本,这也就是传统的本地化过程。这种方法虽然可行,但是成本过高,因为它需要修改很多JAVA源代码并且重新编译整个应用。另外,对于某些传统的JAVA GUI应用而言,其在开发时根本没有考虑到本地化的问题,而且很难获得其源代码,从而也就不可能进行本地化过程。
因此,需要一种能够在不修改源代码的情况下对JAVA GUI应用进行本地化的解决方案。
发明内容
考虑到上述问题,本发明提出了一种能够在不需要知道源代码的情况下本地化JAVA GUI应用的系统和方法,它通过JAVA字节码侦断工具(Bytecode Instrument Tool)和UI表现功能捕获-增强来透明地本地化JAVA GUI应用。经过本地化的JAVA GUI应用能以任何语言显示UI,并且输出文本可以随时被修改成任何其他语言。
根据本发明的一个方面,提供一种将软件应用的源语言用户界面本地化成目标语言用户界面的方法,包括:在软件应用使用源语言用户界面运行时,从该软件应用的字节码中提取出源语言GUI组件文字,将提取出的源语言GUI组件文字形成一个本地化包文件,将所述本地化包文件中的源语言GUI组件文字翻译成目标语言,再次运行该软件应用时,从翻译的本地化包文件中加载翻译后的GUI组件文字,以及将翻译成目标语言的GUI组件显示在显示屏幕上。
根据本发明的另一个方面,提供一种将软件应用的源语言用户界面本地化成目标语言用户界面的系统,包括:提取装置,用于在软件应用使用源语言用户界面运行时,从该软件应用的字节码中提取出源语言GUI组件文字;本地化包文件,用于存储提取出的源语言GUI组件文字,并供将源语言GUI组件文字翻译成目标语言GUI组件之用;加载装置,用于在再次运行该软件应用时,从翻译的本地化包文件中加载翻译后的GUI组件文字,以将翻译成目标语言的GUI组件显示在显示屏幕上。
本发明的原理是在软件应用运行时,捕获相应的函数调用(如,setXXX(string)或构造器),提取其中的文本并将其保存到本地化包文件中。随后,在将本地化包文件从源语言翻译到目标语言之后,在软件应用下次运行时,将从该本地化包文件中加载翻译后的文本,并显示在窗口中。这种方法将所有与UI相关的字符串提取到一个单独的文件中,并读取翻译后的NLS(National Language Support)字符串,以便以自动和透明的方法进行显示。
根据本发明的优选实施方式,还可以对动态字符串以及动态加载的字符串进行翻译。
本发明为用户使用不是用自己的母语编写的JAVA GUI应用带来了方便。如果这样的应用在发售之前没有被本地化、甚至不可能被本地化,那么通过使用本发明,用户能够自己将其中的GUI组件提取出来进行翻译,随后便可以使用具有翻译后的用户界面组件的应用。
通过使用本发明,可以基本上取代传统的高成本的本地化过程。
附图说明
以下通过结合附图的说明,对本发明的上述以及其他优点和特征将变得更加明了。在附图中:
图1描述了根据本发明实施方式的方法的总体流程图。
图2示出了根据本发明实施方式的系统的总体框图。
图3是一个示意图,示意地表示出了在经过根据本发明的系统后,可能会对软件应用的字节码进行哪些改变。
图4表示图1中提取步骤的具体执行步骤的一个例子。
图5表示图1中加载步骤的具体执行步骤的一个例子。
图6描述了对动态字符串进行处理的示意性流程图。
图7描述了对动态加载的GUI组件进行处理的示意性流程图。
图8示出了如图2所示的提取装置的进一步构成。
图9示出了如图2所示的加载装置的进一步构成。
图10示出了在对动态字符串进行处理时,根据本发明系统的进一步结构。
图11示出了在对动态字符串或动态加载字符串进行处理时,根据本发明系统的进一步结构。
具体实施方式
以下将参照附图对本发明的优选实施方式进行详细说明。
应当指出,在本说明书中,将主要使用以英语为源语言、简体中文为目标语言的JAVA GUI应用作为例子进行描述,但是能够理解,本发明只是为用户在不知道源代码的情况下对用户界面组件进行本地化提供了可能,与应用在本地化之前或之后使用怎样的语言不相关。
下面参照图1,其描述了根据本发明的方法的总体流程图。在图1中,假定一个软件应用用户界面的源语言是英语,而以中文作为自己母语的用户更希望将该英语用户界面翻译成中文,以便于使用。
根据本发明的方法在步骤100中开始,随后进入步骤110。在步骤110中,运行使用英语用户界面的软件应用,并在运行时从该软件应用的字节码中逐一提取出GUI组件的文字。在提取了所有可本地化的GUI组件文字后,在步骤120中,将这些GUI组件形成一个本地化包文件,该本地化包文件可以存储在用户的计算机中或者其他适当的位置。接着,在步骤130中,用户可以将所述本地化包文件中的各用户界面组件的文字翻译成中文。随后,在步骤140中,在下一次运行该软件应用时,用户将从翻译的本地化包文件中加载翻译后的GUI组件文字。从而在步骤150中,会将翻译成中文的用户界面组件显示在显示屏幕上。随后,本发明的方法在步骤160中结束。
以下将对图1中的方法所涉及的技术进行详细说明。
首先,如本领域技术人员所知,为了在显示窗口中显示不可编辑的文本,开发人员需要使用诸如AWT Lable或者Swing JLable之类的GUI组件,调用setXXX(string)(例如,setText(string))或者其构造器(新的JLable(string)),方可进行显示。对于编写用户界面时用到的各个GUI组件的JAVA类(例如,TextField、JTextField、Button、JButton、Menu、JMenu、MenuItem、JMenuItem等)而言,都需要使用构造器或者setXXX(string)来在用户界面上显示消息。
上面提到的setXXX(string)表示的是要在用户界面上显示的文字,其在大部分情况下为setText(string),例如“setText(“OK”)”可以是常见的“OK”按钮。构造器(constructor)表示的是在类被初始化时所调用的一段程序,它可以用于定义例如GUI组件的大小、位置等。setXXX(string)和构造器都可以被称为“方法”或被看作一个函数调用。
因此,在图1的步骤110中,通过在JAVA字节码中搜索构造器或者setXXX(string)来实现GUI组件的提取。
其次,所谓“字节码”,是在处理初始源代码时,由编译程序产生的一种计算机程序编码。通过使用JAVA字节码侦断工具可以在字节码中插入一些指令,以便能够在软件程序运行时从中提取出信息。
JAVA字节码侦断是基于JAVA面向方面的编程的基础。JAVA字节码侦断工具使得用户能够在字节码中的任何位置插入指令,以便能够在软件程序运行时从中提取出信息。JAVA字节码侦断工具以静态方式加载JAVA字节码(作为对象加载),或者以动态方法加载JAVA字节码(作为自定义的类加载器加载),并且可以基于JVM(JavaVirtual Machine)规范来侦断字节码。Javaassist和Apache BCEL是目前通用的两种开放源码JAVA字节码侦断工具,但本发明并不局限于此,而是同样适用于其他JAVA字节码侦断工具。
再次,在图1的步骤110中提取需要本地化的GUI组件的过程中,还会用到一个类-方法映射表。
该表存储了类及其文本显示方法之间的映射。例如,对于JLable类而言,其文本显示方法是setText(string)或者新的JLable(string)。为了显示MenuItem,使用setLabel(string)。该映射表可以具有如下所示的形式:
JLable=setText
JLable=JLable
JButton=setText
JButton=JButton
……
在上表第二行的“JLable=JLable”中,等号右侧的JLable表示构造器,其与类具有相同的名称。
类-方法映射表显示了需要进行本地化的类和方法的列表,供侦断字节码时进行判断。在该表中,只有列出的类及其方法才被进行本地化处理。
此外,某些JAVA类可以扩展基本的AWT/Swing窗口组件,因此,它们的类名将是未知的,因而不会包括在类-方法映射表中。这时,可以通过查找该类的超类来找到其需要本地化的方法调用,并最终将超类与AWT/Swing窗口组件的基本类关联起来。由于如何将超类与基本类关联起来并非本发明关心的问题,在此不做详细描述。
综上所述,根据本发明的方法通过使用字节码侦断工具,可以在某个特定类的setXXX(string)方法之前或之后插入特定的指令,以便拦截所述setXXX(string)方法并将其提取出来。所述插入的指令首先捕获将由setXXX(string)方法显示的文本字符串并将其保存到本地化文件中。在捕获并提取了所有可本地化的方法后,将原始软件应用中的所有可翻译字符串以<key=value>的形式转储到一个本地化文件中。其中,“key”是该方法的标识,可以使用该方法所在类名、字符串显示位置、方法名以及方法位置等方式唯一地识别,“value”则是提取的源语言(例如,英文)文本。此后,用户可以将所生成的本地化文件翻译成任何目标语言。
于是,当再次运行该软件应用时,插入的指令将检查所捕获的文本是否在本地化文件中,如果是,则所述插入的指令将用本地化后的GUI组件替换被捕获的文本。从而能够在屏幕上显示翻译后的GUI组件的语言包。
本地化后的JAVA GUI应用可以包含以下三个部分:增强的JAR(JAVA Archive)包、本地化包管理器以及本地化包。
其中,增强的JAR包存储着本地化后的JAVA GUI应用的JAVA代码,含有一系列相关的类和接口。本地化包管理器用于将提取的文本写入位于用户计算机系统中的本地化包文件中,并从该文件中搜索翻译的文本以进行显示。本地化包则存储着本地化后的JAVA GUI应用用户界面组件。
所述本地化包管理器可以通过JAVA字节码侦断工具实现。在JAVA字节码中发现要本地化的GUI组件时,可以使用JAVA字节码侦断工具在该GUI组件的函数调用之前插入指令,以便捕获该函数调用的文本串并保存到本地化包文件中。在进行本地化之后,需要将本地化包管理器添加到原始JAVA GUI应用的类路径中的类,以便原始JAVA GUI应用能够知道在何处需要调用本地化包文件,以使用翻译后的GUI组件。可以将本地化包管理器看作所有侦断指令的集合。本地化包管理器也是唯一一个需要添加到原始JAVA GUI应用的类路径中的类。
图2示出了根据本发明的系统的总体框图。根据本发明的系统200包括一个提取装置210,用于在使用英语用户界面的软件应用运行时,从该软件应用的字节码中提取出GUI组件的文字。所述系统200还包括一个可以位于用户计算机的本地或者任何其他适当位置的本地化包,用于存储由提取装置提取出的各GUI组件的文字,并供用户将其中的各用户界面组件文字翻译成中文之用。根据本发明的系统200还包括一个加载装置230,用于在用户下一次运行该软件应用时,从翻译的本地化包文件中加载翻译后的GUI组件文字,从而可以将翻译后的GUI组件显示在显示屏幕上。
图3示意地表示出了在经过根据本发明的系统后,可能对软件应用的字节码进行了哪些改变。标号310表示本发明的系统框,左侧框320表示未经本发明的系统的本地化过程的字节码,右侧框330表示经过本发明的系统的本地化过程的字节码。
以下将参照图4对图1方法中的提取步骤110做详细描述。进行提取的过程从步骤400开始,随后进入步骤410。在步骤410中,将加载原始JAVA GUI应用的JAR包。接着,在步骤420中,从JAR包中加载JAVA字节码和类-方法映射表,并且在步骤430中,对每个类查找与之匹配的方法调用。如果在步骤440中找到可本地化的方法(“是”分支),则该提取过程进入步骤450,对字节码添加侦断指令,以便能够拦截所述可本地化的方法。接下来,在步骤460中判断是否已对所有类进行了所述查找,如果是,则该提取过程结束,如果否,则该提取过程返回步骤430,继续对其他类查找匹配的方法调用。
另一方面,如果在步骤440中没有找到与某个类对应的可本地化方法(“否”分支),则根据本发明的提取过程直接进入步骤460,以判断是否还需要对剩余的类重复前述操作。
在对所有类执行了上述操作后,该提取过程在步骤470中结束。
以下将参照图5对图1方法中加载步骤130做详细描述。进行加载的过程从步骤500开始,随后进入步骤510。在步骤510中,在执行软件应用的过程中,遇到插入的侦断指令,这意味着有需要显示的GUI组件。于是,在步骤520中,所述侦断指令触发读取例如存储在用户计算机中的本地化包文件。在步骤530中判断,所述需要本地化的GUI组件是否在该本地化包中。如果在步骤530中的判断为“是”,即该本地化包中存在该GUI组件的翻译,则过程进入步骤540,从而加载翻译后的该GUI组件,并在步骤550中在屏幕上显示翻译后的GUI组件。随后,在步骤560中继续执行该软件应用的其他部分。并且该过程在步骤570中结束。
然而,如果在步骤530中的判断为“否”,即该本地化包中不存在该GUI组件的翻译,则该过程进入步骤580,一方面,在显示屏幕上显示使用源语言(例如,英文)的该GUI组件,另一方面,将该GUI组件以<key=value>的形式存储到本地化包文件中,以供随后翻译之用。
如果某个GUI组件只在极少的情况下才出现,那么便可能发生步骤530的“否”分支的情况。当这种情况出现时,可通过步骤580将其提取出来,并将其翻译补充在本地化包文件中。
由此可见,根据本发明的方法和系统在对用户界面进行本地化时,并不要求一次性地完成用户界面组件的翻译,而是可以随着出现新的GUI组件,不断补充和完善翻译文件。
另外,在我们操作计算机的过程中会发现,在用户界面中有一些GUI组件是动态的,其会随软件应用的运行环境、系统状况等的不同而发生改变,我们将这种动态的GUI组件称为动态字符串。通常,动态字符串都是由几个子字符串连接在一起构成的一个字符串,其中一些子字符串是静态的,另一些则是动态的。
例如,在Windows XP操作系统中进行磁盘清理时,可能看到如下动态字符串:
“disk collating”can be used to release 2,374,781KB of diskspace on(C:)
在上述字符串中,““disk collating”can be used to release”以及“KB of disk space on”是静态的,而“2,374,781”和“(C:)”是动态的,会随系统运行的位置和状况不同而发生变化。
能够理解,如果准备按照如前所述的方式将这样的动态字符串原封不动地提取出来并进行翻译,那么当下一次运行系统时,系统状况或运行位置发生了变化,由于本地化包文件中的翻译仍然是对应于上述特定的字符串的翻译,因而不能反映出计算机当前的实际情况。
针对这种情况,本发明提出了如图6所示的方法。
根据本发明的方法在步骤600中开始,随后进入步骤610。在步骤610中,执行对提取出的各GUI组件进行翻译的过程。在步骤620,翻译者发现其中某个要翻译的GUI组件包括动态字符串。接下来,在步骤640中,由翻译者对该动态字符串定义一定的分割策略,以将该字符串中的动态部分和静态部分区别开来。在步骤650中,对该字符串的静态部分进行翻译。然后,在步骤660中,当再次运行系统并遇到该动态字符串的某种变形时,系统可以根据翻译者先前定义的分割规则确定其翻译(例如通过将遇到的字符串与先前提取的字符串进行比照),并显示给用户。根据本发明的方法在步骤660中结束。
应当理解,对于动态字符串而言,组成它的各部分之间的组合关系不会发生变化,变化的只是各部分中的具体内容。
另外,随着计算机系统功能的不断演进,其在操作时与外部程序或系统之间的交互也越来越多,因而某些应用会从外部类(例如,包含基于GUI的编辑器的Eclipse插件)动态加载GUI。由于根据本发明的前述系统和方法在JAVA应用执行前对其进行本地化,因此从网络或其他文件系统下载的未知JAVA类将不能被本地化。
为了解决这一类问题,本发明为用户提供了直接在用户界面中翻译动态字符串的途径。这可以通过图7所示的方法来实现。
对于动态加载的GUI的情况,根据本发明的系统可以添加特定的事件处理器,以便从用户接收关于某个界面显示内容为动态加载GUI的通知。这种事件处理器可以实现为显示屏幕上一个按钮,当用户按下按钮时,则触发该事件处理器,以允许用户直接翻译该GUI。
该方法从步骤700开始,并进入步骤710。在步骤710中,用户界面上显示了未翻译的动态加载GUI。于是,在步骤720中,用户会将此情况通知系统(例如,如上所述,通过按下屏幕上的特定按钮)。在步骤730中,响应于用户的通知,系统将为用户提供翻译该字符串的手段,例如可以弹出一个文本框,供用户在其中输入该动态字符串的翻译。随后,在步骤740中,用户将翻译内容提交给系统。于是,在步骤750中,系统将存储该翻译并显示翻译后的GUI动态刷新。根据本发明的方法在步骤760中结束。
根据本发明的系统可以象对普通的静态字符串那样存储动态加载GUI组件的翻译,以便在下次遇到该动态加载的GUI组件时,系统可以不向用户提供让用户在其中进行翻译的文本框,而是直接将翻译后的该动态加载GUI组件显示给用户。
此外,如图7所示的手动翻译也适用于对前述动态字符串的翻译。
以下将描述与根据本发明的方法过程对应的系统结构。
图8示出了如图2所示的提取装置210的进一步构成。所述提取装置210还包括用于从JAR包中加载JAVA字节码和类-方法映射表的装置810,用于在类-方法映射表中为每个类查找与之匹配的方法调用的装置820,用于在找到匹配的方法调用的情况下,对该方法调用的字节码添加侦断指令的装置830,以及用于判断是否已对每个类查找了与之匹配的方法调用的装置840。
另外,当JAVA类扩展了基本GUI组件而使其类名未知时,所述提取装置210还可包括:用于通过查找该基本GUI组件的超类来找到其需要本地化的方法调用的装置850,以及用于将超类与该GUI窗口组件的基本类关联起来的装置860。
图9示出了如图2所示的加载装置230的进一步构成。所述加载装置230还包括:用于在执行软件应用的过程中,当遇到插入的侦断指令时,读取存储在用户计算机中的本地化包文件的装置910,用于判断所述要显示的GUI组件是否在该本地化包中的装置920,用于在判断所述要显示的GUI组件在该本地化包中时,加载翻译后的该GUI组件的装置930,以及用于在屏幕上显示翻译后的GUI组件的装置940。
另外,在所述用于判断的装置判断所述要显示的GUI组件不在该本地化包中时,所述加载装置230还可包括:用于在屏幕上显示源语言的该GUI组件的装置950;以及用于将该GUI组件提取到本地化包文件中,以进行翻译的装置960。
图10示出了在对动态字符串进行处理时,根据本发明系统的进一步结构。如果发现提取装置210提取出的某个要翻译的GUI组件包括动态字符串,根据本发明的系统还包括一个用于根据预先定义的分割策略,将该动态字符串中的动态部分和静态部分分离的装置1010,用于在对该动态字符串的静态部分进行翻译后,存储所述翻译的装置1020。当再次运行系统并遇到该动态字符串的某种变形时,所述加载装置230包括根据预先定义的分割规则确定该字符串的翻译并显示给用户的装置1030。
图11示出了在对动态字符串或动态加载字符串进行处理时,根据本发明系统的进一步结构。这时,根据本发明的系统包括用于为所述动态字符串或动态加载字符串定义事件处理器,以便从用户接收关于所述动态字符串或动态加载字符串的通知的装置1110,用于响应于从用户接收到通知,为用户提供文本输入途径,以允许用户对所述动态字符串或动态加载字符串进行手动翻译的装置1120,用于存储用户进行的翻译的装置1130,用于在屏幕上显示翻译后的GUI动态刷新的装置1140。
另外,图11所示的根据本发明的系统还可包括一个用于在系统已经存储有关于某个动态字符串或动态加载字符串的翻译时,直接在用户界面上显示该翻译并禁用所述允许用户在其中进行手动翻译的装置1150。
根据本发明的前述各装置可以采用软件代码编程、硬件分立元件或这二者的结合来实现。
以上主要以Windows操作系统中的用户界面组件为例来描述本发明,但是本发明并不局限于此,本发明可以同等地适用于来自其他资源(例如,其他操作系统、应用程序、数据库、网络)的用户界面组件,只要所述资源是使用JAVA的GUI图形组件应用设计的即可。
以上主要以AWT、Swing这两种JAVA GUI框架为例对本发明进行了说明,但是本发明并不局限于此,本发明适用于任何JAVA RichApplication,常见的例子还包括Eclipse SWT。
此外,由于本发明能够在任何基于JAVA类的界面显示技术中工作,因此本发明不仅能处理单独使用某种JAVA GUI框架的应用,而且能处理同时使用各种JAVA GUI框架的混合GUI环境(例如同时使用了AWT、Swing和SWT技术的用户界面)。
以上结合本发明的优选实施方式对本发明的原理进行了说明。上述说明只是示例性的,不应理解为对本发明的任何限制。本领域技术人员可以在上述说明的基础上,对本发明做出各种修改和变形,但这些修改和改进都包括在随附权利要求书中所限定的本发明的范围和精神内。
Claims (18)
1.一种将软件应用的源语言用户界面本地化成目标语言用户界面的方法,包括:
在软件应用使用源语言用户界面运行时,从该软件应用的字节码中提取出源语言GUI组件文字,
将提取出的源语言GUI组件文字形成一个本地化包文件,
将所述本地化包文件中的源语言GUI组件文字翻译成目标语言,
再次运行该软件应用时,从翻译的本地化包文件中加载翻译后的GUI组件文字;以及
将翻译成目标语言的GUI组件显示在显示屏幕上。
2.根据权利要求1所述的方法,其中所述提取步骤包括:
a.从JAR包中加载JAVA字节码和类-方法映射表,
b.在类-方法映射表中为每个类查找与之匹配的方法调用,
c.在找到的情况下,对该方法调用的字节码添加侦断指令,
d.重复步骤b-c的操作,直到已对每个类执行所述操作。
3.根据权利要求1所述的方法,在JAVA类扩展了基本GUI组件而使其类名未知时,所述进行提取的步骤还包括:
a.通过查找该基本GUI组件的超类来找到其需要本地化的方法调用,
b.将超类与该GUI窗口组件的基本类关联起来。
4.根据权利要求1所述的方法,其中所述加载步骤包括:
a.在执行软件应用的过程中,遇到插入的侦断指令,表明有需要显示的GUI组件,
b.所述侦断指令触发读取存储在用户计算机中的本地化包文件,
c.判断所述要显示的GUI组件是否在该本地化包中,
d.如果在步骤c中判断所述要显示的GUI组件在该本地化包中,则加载翻译后的该GUI组件,
e.在屏幕上显示翻译后的GUI组件。
5.根据权利要求4所述的方法,如果所述步骤c判断所述要显示的GUI组件不在该本地化包中,则还包括如下步骤:
f.在屏幕上显示源语言的该GUI组件;
g.将该GUI组件提取到本地化包文件中,以进行翻译。
6.根据权利要求1所述的方法,在所述提取步骤之后还包括如下步骤:
a.对提取出的各GUI组件进行翻译;
b.发现其中某个要翻译的GUI组件包括动态字符串,
c.对该动态字符串定义分割策略,以将该字符串中的动态部分和静态部分分离,
d.对该字符串的静态部分进行翻译,
e.当再次运行系统并遇到该动态字符串的某种变形时,根据定义的分割规则确定其翻译,并显示给用户。
7.根据权利要求1所述的方法,还包括如下步骤:
a.为特定的GUI组件定义事件处理器,以便从用户接收关于所述特定GUI组件的通知,
b.响应于从用户接收到通知,为用户提供文本输入途径,以允许用户对所述特定GUI组件进行手动翻译,
c.在屏幕上显示翻译后的GUI动态刷新。
8.根据权利要求7所述的方法,还包括在系统已经存储有关于所述特定GUI组件的翻译时,直接在用户界面上显示翻译后的该GUI组件的步骤。
9.一种将软件应用的源语言用户界面本地化成目标语言用户界面的系统,包括:
提取装置,用于在软件应用使用源语言用户界面运行时,从该软件应用的字节码中提取出源语言GUI组件文字,
本地化包文件,用于存储提取出的源语言GUI组件文字,并供将源语言GUI组件文字翻译成目标语言GUI组件之用;
加载装置,用于在再次运行该软件应用时,从翻译的本地化包文件中加载翻译后的GUI组件文字,以将翻译成目标语言的GUI组件显示在显示屏幕上。
10.根据权利要求9所述的系统,其中所述提取装置还包括:
用于从JAR包中加载JAVA字节码和类-方法映射表的装置,
用于在类-方法映射表中为每个类查找与之匹配的方法调用的装置,
用于在找到的情况下,对该方法调用的字节码添加侦断指令的装置,以及
用于判断是否已对每个类查找了与之匹配的方法调用的装置。
11.根据权利要求9所述的系统,在JAVA类扩展了基本GUI组件而使其类名未知时,所述提取装置还包括:
用于通过查找该基本GUI组件的超类来找到其需要本地化的方法调用,
用于将超类与该GUI窗口组件的基本类关联起来的装置。
12.根据权利要求9所述的系统,其中所述加载装置包括:
用于在执行软件应用的过程中,当遇到插入的侦断指令时,读取存储在用户计算机中的本地化包文件的装置,
用于判断所述要显示的GUI组件是否在该本地化包中的装置,
用于在判断所述要显示的GUI组件在该本地化包中时,加载翻译后的该GUI组件的装置,
用于在屏幕上显示翻译后的GUI组件的装置。
13.根据权利要求12所述的系统,如果所述用于判断的装置判断所述要显示的GUI组件不在该本地化包中,则所述加载装置还包括:
用于在屏幕上显示源语言的该GUI组件的装置;
用于将该GUI组件提取到本地化包文件中,以进行翻译的装置。
14.根据权利要求9所述的系统,还包括:
用于在发现某个要翻译的GUI组件包括动态字符串时,根据预先定义的分割策略,将该字符串中的动态部分和静态部分分离的装置,
用于在对该动态字符串的静态部分进行翻译后,存储所述翻译的装置,以及
用于当再次运行系统并遇到该动态字符串的某种变形时,根据定义的分割规则确定其翻译,并显示给用户的装置。
15.根据权利要求9所述的系统,还包括如下装置:
用于为特定的GUI组件定义事件处理器,以便从用户接收关于所述特定GUI组件的通知的装置,
用于响应于从用户接收到通知,为用户提供文本输入途径,以允许用户对所述特定GUI组件进行手动翻译的装置,
用于在屏幕上显示翻译后的GUI动态刷新的装置。
16.根据权利要求15所述的系统,还包括用于在系统已经存储有关于某个动态字符串或动态加载字符串的翻译时,直接在用户界面上显示该翻译并禁用所述允许用户在其中进行手动翻译的装置。
17.根据前述任一权利要求中所述的系统,其适用于包括至少下列之一的JAVA Rich Application:AWT、Swing和Eclipse SWT。
18.根据前述任一权利要求中所述的系统,其适用于包括至少下列之一的混合GUI环境:AWT、Swing和Eclipse SWT。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510080938XA CN100447743C (zh) | 2005-06-24 | 2005-06-24 | 在无需修改源代码的情况下本地化java gui应用的系统和方法 |
US11/424,835 US8645928B2 (en) | 2005-06-24 | 2006-06-16 | Localizing a java GUI application without source code modification and rebuilding |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510080938XA CN100447743C (zh) | 2005-06-24 | 2005-06-24 | 在无需修改源代码的情况下本地化java gui应用的系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1885265A true CN1885265A (zh) | 2006-12-27 |
CN100447743C CN100447743C (zh) | 2008-12-31 |
Family
ID=37569070
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200510080938XA Active CN100447743C (zh) | 2005-06-24 | 2005-06-24 | 在无需修改源代码的情况下本地化java gui应用的系统和方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8645928B2 (zh) |
CN (1) | CN100447743C (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324900B (zh) * | 2008-07-30 | 2012-05-02 | 金蝶软件(中国)有限公司 | 一种打开图形使用者界面的方法、装置及系统 |
CN102760057A (zh) * | 2011-04-28 | 2012-10-31 | 鸿富锦精密工业(深圳)有限公司 | 多国语言支持系统及方法 |
CN103309646A (zh) * | 2012-03-07 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 一种软件本地化的方法和装置 |
CN103336768A (zh) * | 2013-06-14 | 2013-10-02 | 深圳市比邻软件有限公司 | 一种翻译手持设备上的应用程序界面的方法、系统及装置 |
CN105094941A (zh) * | 2015-09-24 | 2015-11-25 | 深圳市捷顺科技实业股份有限公司 | 一种实现多语言的方法及装置 |
CN106095685A (zh) * | 2016-06-20 | 2016-11-09 | 浪潮电子信息产业股份有限公司 | 基于linux系统服务器功能测试界面显示的方法 |
CN106201457A (zh) * | 2016-06-24 | 2016-12-07 | 乐视控股(北京)有限公司 | 一种基于应用场景展示操作界面的方法及装置 |
CN106502998A (zh) * | 2016-10-31 | 2017-03-15 | 用友网络科技股份有限公司 | 产品界面多语词条管理集成系统及管理方法 |
CN110990108A (zh) * | 2019-12-24 | 2020-04-10 | 中国银行股份有限公司 | 应用于多语言app的词条翻译方法及装置 |
CN113887250A (zh) * | 2021-09-28 | 2022-01-04 | 上海云轴信息科技有限公司 | 软件界面文字翻译方法及设备 |
CN114880054A (zh) * | 2021-12-31 | 2022-08-09 | 昆仑太科(北京)技术股份有限公司 | 一种BIOS Option Rom Setup选项本地翻译方法 |
CN117744671A (zh) * | 2024-02-21 | 2024-03-22 | 睿云联(厦门)网络通讯技术有限公司 | 一种智能对讲产品全自动化多语言解决方法、设备及介质 |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8146054B2 (en) * | 2006-12-12 | 2012-03-27 | International Business Machines Corporation | Hybrid data object model |
US20080172637A1 (en) * | 2007-01-15 | 2008-07-17 | International Business Machines Corporation | Method and system for using image globalization in dynamic text generation and manipulation |
US20090094609A1 (en) * | 2007-10-09 | 2009-04-09 | Microsoft Corporation | Dynamically providing a localized user interface language resource |
US8335682B2 (en) * | 2007-10-30 | 2012-12-18 | Sercomm Corporation | Multi-language interfaces switch system and method therefor |
US9304785B2 (en) * | 2008-06-02 | 2016-04-05 | International Business Machines Corporation | Localizing a software product |
US20100031235A1 (en) * | 2008-08-01 | 2010-02-04 | Modular Mining Systems, Inc. | Resource Double Lookup Framework |
US8412510B2 (en) * | 2010-04-21 | 2013-04-02 | Fisher-Rosemount Systems, Inc. | Methods and apparatus to display localized resources in process control applications |
US20120084643A1 (en) * | 2010-09-30 | 2012-04-05 | Balaji Govindan | Component-specific and source-agnostic localization |
EP2515512A1 (en) * | 2011-04-21 | 2012-10-24 | Research In Motion Limited | Methods and systems for sharing language capabilities |
US8775157B2 (en) | 2011-04-21 | 2014-07-08 | Blackberry Limited | Methods and systems for sharing language capabilities |
US9195653B2 (en) * | 2011-10-24 | 2015-11-24 | Google Inc. | Identification of in-context resources that are not fully localized |
US9805027B2 (en) | 2012-02-03 | 2017-10-31 | Google Inc. | Translating application resources |
CN104169872B (zh) * | 2012-02-03 | 2018-07-31 | 谷歌有限责任公司 | 翻译应用程序资源 |
US8627291B2 (en) * | 2012-04-02 | 2014-01-07 | International Business Machines Corporation | Identification of localizable function calls |
US20140195220A1 (en) * | 2013-01-07 | 2014-07-10 | Unisys Corporation | Method and system for internationalization of a computing device |
US20150081269A1 (en) * | 2013-09-17 | 2015-03-19 | Lingua Next Technologies Pvt. Ltd. | Language Localization Of Java Applications |
GB2532763A (en) | 2014-11-27 | 2016-06-01 | Ibm | Displaying an application in the graphical user interface of a computer display |
US10248537B2 (en) | 2015-04-28 | 2019-04-02 | Microsoft Technology Licensing, Llc | Translation bug prediction classifier |
CN105407160B (zh) * | 2015-11-27 | 2019-04-23 | 小米科技有限责任公司 | 界面显示方法和装置 |
US10229220B2 (en) * | 2016-05-09 | 2019-03-12 | Coupa Software Incorporated | Automatic entry of suggested translated terms in an online application program |
US10325027B2 (en) | 2017-02-07 | 2019-06-18 | International Business Machines Corporation | Changing a language for a user session replay |
US10235361B2 (en) * | 2017-02-15 | 2019-03-19 | International Business Machines Corporation | Context-aware translation memory to facilitate more accurate translation |
US10275223B2 (en) * | 2017-06-22 | 2019-04-30 | International Business Machines Corporation | Distributed key-value consistency and mapping |
US10318644B1 (en) | 2017-07-26 | 2019-06-11 | Coupa Software Incorporated | Dynamic update of translations for electronic resources |
EP3543844B1 (de) * | 2018-03-22 | 2020-04-29 | Sick Ag | Verfahren zum durchführen von änderungen an einer software-anwendung |
CN109657249B (zh) * | 2018-11-21 | 2022-03-22 | 天津字节跳动科技有限公司 | 应用程序的文本自动替换方法、装置及电子设备 |
US11842165B2 (en) * | 2019-08-28 | 2023-12-12 | Adobe Inc. | Context-based image tag translation |
US11385916B2 (en) * | 2020-03-16 | 2022-07-12 | Servicenow, Inc. | Dynamic translation of graphical user interfaces |
US11580312B2 (en) | 2020-03-16 | 2023-02-14 | Servicenow, Inc. | Machine translation of chat sessions |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5583761A (en) * | 1993-10-13 | 1996-12-10 | Kt International, Inc. | Method for automatic displaying program presentations in different languages |
US5953524A (en) * | 1996-11-22 | 1999-09-14 | Sybase, Inc. | Development system with methods for runtime binding of user-defined classes |
US6151022A (en) * | 1997-12-01 | 2000-11-21 | Microsoft Corporation | Method and apparatus for statically testing visual resources |
US6311151B1 (en) * | 1999-07-28 | 2001-10-30 | International Business Machines Corporation | System, program, and method for performing contextual software translations |
US6735759B1 (en) * | 1999-07-28 | 2004-05-11 | International Business Machines Corporation | Editing system for translating displayed user language using a wrapper class |
US6567973B1 (en) * | 1999-07-28 | 2003-05-20 | International Business Machines Corporation | Introspective editor system, program, and method for software translation using a facade class |
US6275790B1 (en) * | 1999-07-28 | 2001-08-14 | International Business Machines Corporation | Introspective editor system, program, and method for software translation |
US7024365B1 (en) * | 1999-10-04 | 2006-04-04 | Hewlett-Packard Development Company, L.P. | Method for generating localizable message catalogs for Java-based applications |
US6802055B2 (en) * | 2001-06-27 | 2004-10-05 | Microsoft Corporation | Capturing graphics primitives associated with any display object rendered to a graphical user interface |
US20030041319A1 (en) * | 2001-08-24 | 2003-02-27 | Sun Microsystems, Inc. | Java bytecode instruction for retrieving string representations of java objects |
US7152222B2 (en) * | 2002-01-08 | 2006-12-19 | International Business Machines Corporation | Method and system for localizing Java™ JAR files |
US7281242B2 (en) * | 2002-01-18 | 2007-10-09 | Bea Systems, Inc. | Flexible and extensible Java bytecode instrumentation system |
AU2003269798A1 (en) * | 2002-02-01 | 2004-01-06 | John Fairweather | A system for exchanging binary data |
EP1378827A1 (en) * | 2002-07-05 | 2004-01-07 | Alcatel | Process for changing the language of a GUI application without exiting and re-entering the application |
US7299411B2 (en) * | 2002-09-27 | 2007-11-20 | Liberate Technologies | Providing a presentation engine adapted for use by a constrained resource client device |
GB0315193D0 (en) * | 2003-06-28 | 2003-08-06 | Ibm | System and method for user interface automation |
CN1261867C (zh) * | 2003-12-16 | 2006-06-28 | 艾默生网络能源有限公司 | 软件中语言资源本地化的实现方法 |
US7814415B2 (en) * | 2004-11-19 | 2010-10-12 | Red Hat, Inc. | Bytecode localization engine and instructions |
-
2005
- 2005-06-24 CN CNB200510080938XA patent/CN100447743C/zh active Active
-
2006
- 2006-06-16 US US11/424,835 patent/US8645928B2/en active Active
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324900B (zh) * | 2008-07-30 | 2012-05-02 | 金蝶软件(中国)有限公司 | 一种打开图形使用者界面的方法、装置及系统 |
CN102760057A (zh) * | 2011-04-28 | 2012-10-31 | 鸿富锦精密工业(深圳)有限公司 | 多国语言支持系统及方法 |
CN103309646B (zh) * | 2012-03-07 | 2017-11-14 | 腾讯科技(深圳)有限公司 | 一种软件本地化的方法和装置 |
CN103309646A (zh) * | 2012-03-07 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 一种软件本地化的方法和装置 |
CN103336768A (zh) * | 2013-06-14 | 2013-10-02 | 深圳市比邻软件有限公司 | 一种翻译手持设备上的应用程序界面的方法、系统及装置 |
CN103336768B (zh) * | 2013-06-14 | 2016-09-07 | 深圳市比邻软件有限公司 | 一种翻译手持设备上的应用程序界面的方法、系统及装置 |
CN105094941A (zh) * | 2015-09-24 | 2015-11-25 | 深圳市捷顺科技实业股份有限公司 | 一种实现多语言的方法及装置 |
CN105094941B (zh) * | 2015-09-24 | 2018-11-02 | 深圳市捷顺科技实业股份有限公司 | 一种实现多语言的方法及装置 |
CN106095685A (zh) * | 2016-06-20 | 2016-11-09 | 浪潮电子信息产业股份有限公司 | 基于linux系统服务器功能测试界面显示的方法 |
CN106201457A (zh) * | 2016-06-24 | 2016-12-07 | 乐视控股(北京)有限公司 | 一种基于应用场景展示操作界面的方法及装置 |
CN106502998A (zh) * | 2016-10-31 | 2017-03-15 | 用友网络科技股份有限公司 | 产品界面多语词条管理集成系统及管理方法 |
CN110990108A (zh) * | 2019-12-24 | 2020-04-10 | 中国银行股份有限公司 | 应用于多语言app的词条翻译方法及装置 |
CN113887250A (zh) * | 2021-09-28 | 2022-01-04 | 上海云轴信息科技有限公司 | 软件界面文字翻译方法及设备 |
CN114880054A (zh) * | 2021-12-31 | 2022-08-09 | 昆仑太科(北京)技术股份有限公司 | 一种BIOS Option Rom Setup选项本地翻译方法 |
CN117744671A (zh) * | 2024-02-21 | 2024-03-22 | 睿云联(厦门)网络通讯技术有限公司 | 一种智能对讲产品全自动化多语言解决方法、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
US8645928B2 (en) | 2014-02-04 |
US20060294463A1 (en) | 2006-12-28 |
CN100447743C (zh) | 2008-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1885265A (zh) | 在无需修改源代码的情况下本地化java gui应用的系统和方法 | |
CN1181428C (zh) | 软件翻译的内省编辑器系统、程序和方法 | |
CN106462425B (zh) | 使用复常量的方法和系统 | |
US8862456B2 (en) | System and method for automatic language translation for applications | |
US8001489B2 (en) | Element persistent identification | |
US9465726B2 (en) | Abstract layer for automatic user interface testing | |
US20030084401A1 (en) | Efficient web page localization | |
US7509251B2 (en) | Mock translating software applications at runtime | |
CN108139896A (zh) | 扩展虚拟机指令集体系架构 | |
CN1221912A (zh) | 用于发现内存泄漏和运行期信息的对象堆分析技术 | |
CN101002174B (zh) | 在便携式装置中加载具有面向对象的中间语言的软件的方法 | |
CN112379917B (zh) | 浏览器兼容性提升方法、装置、设备及存储介质 | |
NO332643B1 (no) | Programmeringsgrensesnitt for en datamaskinplattform | |
EP1890235A1 (en) | Test case management | |
CN1841362A (zh) | 用于处理电子表格的方法和系统 | |
US20080189682A1 (en) | In-Line Editor | |
US8893097B2 (en) | Tool configured to build cross-browser toolbar | |
CN109313547B (zh) | 用于cpu利用率和代码重构的查询优化器 | |
EP2332075A1 (en) | A method for localizing text in a software application | |
WO2008097816A2 (en) | Direct access of language metadata | |
CN102364437A (zh) | 多语言站点开发系统及其实现方法 | |
CN1329309A (zh) | 操作系统的多语言用户接口 | |
CN109710218B (zh) | 一种对象自动转换方法及终端 | |
CN105160001A (zh) | 一种Linux系统物理内存镜像文件分析方法 | |
CN1158600C (zh) | 用于操作平台可移植虚拟机的计算机系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |