CN117555609A - 注解国际化方法、装置、存储介质及电子设备 - Google Patents
注解国际化方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN117555609A CN117555609A CN202311297990.5A CN202311297990A CN117555609A CN 117555609 A CN117555609 A CN 117555609A CN 202311297990 A CN202311297990 A CN 202311297990A CN 117555609 A CN117555609 A CN 117555609A
- Authority
- CN
- China
- Prior art keywords
- class
- internationalization
- annotation
- target
- loaded
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000012545 processing Methods 0.000 claims abstract description 38
- 238000004590 computer program Methods 0.000 claims description 11
- 238000013519 translation Methods 0.000 claims description 10
- 238000013507 mapping Methods 0.000 claims description 5
- 230000007246 mechanism Effects 0.000 claims description 4
- 238000001514 detection method Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 13
- 238000010586 diagram Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 102000006822 Agouti Signaling Protein Human genes 0.000 description 1
- 108010072151 Agouti Signaling Protein Proteins 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 210000001072 colon Anatomy 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/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
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Library & Information Science (AREA)
- Human Computer Interaction (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Document Processing Apparatus (AREA)
Abstract
本申请提供一种注解国际化方法、装置、存储介质及电子设备,涉及计算机领域。其中,电子设备若检测到类加载操作,则对类加载操作进行拦截,并判断类加载操作中的待加载类是否标记有指示国际化处理的预设类注解;若标记有指示国际化的预设类注解,则获取待加载类当前语言环境所需的国际化信息;根据国际化信息对待加载类进行国际化处理,获得目标加载类。如此,在类加载期间只需完成一次注解国际化,即可使得后续可以直接基于目标加载类生成对象,从而提高了注解国际化的效率。
Description
技术领域
本申请涉及计算机领域,具体而言,涉及一种注解国际化方法、装置、存储介质及电子设备。
背景技术
在应用软件产品中,国际化已经是很流行的解决方案,只要一款应用软件涉及使用不同语言的用户,通常都需要进行国际化。例如,某款应用软件的菜单默认显示中文,但需要根据使用英文的用户所作的配置,将菜单以英文显示。虽然相关技术中提出了通过注解实现国际化,但实践过程中发现,现有相关技术存在国际化资源加载效率欠佳的问题。
发明内容
为了克服现有技术中的至少一个不足,本申请提供一种注解国际化方法、装置、存储介质及电子设备,具体包括:
第一方面,本申请提供一种注解国际化方法,所述方法包括:
若检测到类加载操作,则对所述类加载操作进行拦截,并判断所述类加载操作中的待加载类是否标记有指示国际化处理的预设类注解;
若标记有指示国际化处理的预设类注解,则获取所述待加载类当前语言环境所需的国际化信息;
根据所述国际化信息对所述待加载类进行国际化处理,获得目标加载类。
结合第一方面的可选实施方式,所述国际化信息包括所述待加载类中国际化变量的翻译文本,所述获取所述待加载类当前语言环境所需的国际化信息,包括:
获取所述待加载类的目标注解配置文件;
解析所述目标注解配置文件,得到所述待加载类中的国际化变量;
根据与当前语言环境相匹配的国际化资源文件,从中获得所述国际化变量的翻译文本。
结合第一方面的可选实施方式,所述获取所述待加载类的目标注解配置文件,包括:
获取所述待加载类的类加载路径;
根据所述类加载路径,获得所述目标注解配置文件的目标文件路径,其中,所述类加载路径与所述目标注解配置文件的目标文件路径满足预设映射关系;
在所述目标文件路径下获取所述目标注解配置文件。
结合第一方面的可选实施方式,所述在所述目标文件路径下获取所述目标注解配置文件,包括:
获取所述预设类注解的注解属性值;
根据所述注解属性值,确定所述目标注解配置文件的名称信息;
根据所述名称信息,从所述目标文件路径下获取所述目标注解配置文件。
结合第一方面的可选实施方式,在所述若检测到类加载操作,则对所述类加载操作进行拦截之前,所述方法还包括:
获取当前的语言环境;
根据所述当前的语言环境,从多个国际化资源文件中选取与当前语言环境相匹配的国际化资源文件;
加载与当前语言环境相匹配的国际化资源文件。
结合第一方面的可选实施方式,所述方法还包括:
将所述目标加载类加载到内存中。
结合第一方面的可选实施方式,通过反射机制检测所述类加载操作。
第二方面,本申请提供一种注解国际化装置,所述装置包括:
拦截模块,用于若检测到类加载操作,则对所述类加载操作进行拦截,并判断所述类加载操作中的待加载类是否标记有指示国际化处理的预设类注解;
国际模块,用于若标记有指示国际化处理的预设类注解,则获取所述待加载类当前语言环境所需的国际化信息;
所述国际模块,还用于根据所述国际化信息对所述待加载类进行国际化处理,获得目标加载类。
结合第二方面的可选实施方式,所述国际化信息包括所述待加载类中国际化变量的翻译文本,所述国际模块还具体用于:
获取所述待加载类的目标注解配置文件;
解析所述目标注解配置文件,得到所述待加载类中的国际化变量;
根据与当前语言环境相匹配的国际化资源文件,从中获得所述国际化变量的翻译文本。
结合第二方面的可选实施方式,所述国际模块还具体用于:
获取所述待加载类的类加载路径;
根据所述类加载路径,获得所述目标注解配置文件的目标文件路径,其中,所述类加载路径与所述目标注解配置文件的目标文件路径满足预设映射关系;
在所述目标文件路径下获取所述目标注解配置文件。
结合第二方面的可选实施方式,所述在国际模块还具体用于:
获取所述预设类注解的注解属性值;
根据所述注解属性值,确定所述目标注解配置文件的名称信息;
根据所述名称信息,从所述目标文件路径下获取所述目标注解配置文件。
结合第二方面的可选实施方式,在所述若检测到类加载操作,则对所述类加载操作进行拦截之前,所述拦截模块还用于:
获取当前的语言环境;
根据所述当前的语言环境,从多个国际化资源文件中选取与当前语言环境相匹配的国际化资源文件;
加载与当前语言环境相匹配的国际化资源文件。
结合第二方面的可选实施方式,所述国际模块还用于:将所述目标加载类加载到内存中。
结合第二方面的可选实施方式,通过反射机制检测所述类加载操作。
第三方面,本申请还提供一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现所述的注解国际化方法。
第四方面,本申请还提供一种电子设备,所述电子设备包括处理器以及存储器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现所述的注解国际化方法。
相对于现有技术而言,本申请具有以下有益效果:
本实施例提供一种注解国际化方法、装置、存储介质及电子设备。其中,电子设备若检测到类加载操作,则对类加载操作进行拦截,并判断类加载操作中的待加载类是否标记有指示国际化处理的预设类注解;若标记有指示国际化处理的预设类注解,则获取待加载类当前语言环境所需的国际化信息;根据国际化信息对待加载类进行国际化处理,获得目标加载类。如此,在类加载期间只需完成一次注解国际化,即可使得后续可以直接基于目标加载类生成对象,从而提高了注解国际化的效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的注解国际化方法流程图之一;
图2为本申请实施例提供的注解国际化方法流程图之二;
图3为本申请实施例提供的注解国际化装置的结构示意图;
图4为本申请实施例提供的电子设备的结构示意图。
图标:101-拦截模块;102-国际模块;201-存储器;202-处理器;203-通信单元;204-系统总线。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本申请的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。此外,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
鉴于本实施例涉及到一些计算机领域的专业术语,为使得本实施例后续介绍的方案更易于理解,下面先对本实施例可能涉及到的专业术语进行解释:
1、注释,代码注释是在计算机程序源代码中添加的用于解释代码功能、目的或实现细节的文本,通常用于向其他开发人员或自己解释代码的意图和工作原理。由于提供关于代码逻辑、算法、数据结构或特定部分的上下文信息,因此,代码注释对于代码的编写以及维护具有非常重要的作用。代码注释可以是单行注释或多行注释,其中,单行注释通常用于在代码行的末尾添加注释,以解释该行代码的作用;而多行注释用于注释一段代码、函数、类或整个文件。
2、注解,代码注解一种特殊的注释形式,通常用于提供额外的元数据、标记或指示给编译器、解释器或其他工具。与传统的代码注释不同,代码注解通常具有一定的语义和特定的处理方式。代码注解可以包含在源代码中,并通过特定的语法或注解标记来识别和解析。代码注解可以用于各种目的,如类型检查、代码生成、文档生成、运行时行为修改等。需要注意到是,代码注释主要用于开发者之间的交流和代码理解,而代码注解则更多地关注于编译器、解释器或其他工具的处理和利用。
示例性的,以Java为例,通常使用“@+注解名称”的方式在源代码中插入注解。下面提供一个父类:
继续提供一个继承上述父类的子类,使用注解“@Override”标记对父类中的方法进行重写:
如此,使用“@Override”注解可以使代码更加清晰,明确地表明该方法是对父类方法的覆盖,有助于其他开发人员更好地理解代码。此外,在对代码进行编译时,编译器会检查带有“@Override”注解的方法是否正确地覆盖了父类或接口中的方法。如果方法签名与父类或接口中的方法不匹配,编译器将报错。以及如果父类中的方法发生了变化(如重命名、参数修改等),子类中使用“@Override”注解的方法将无法编译通过,从而帮助开发人员意识到需要进行相应的修改。
3、自定义注解,当Java语言提供的内置注解不能满足需求是,开发人员可以在代码中创建自定义的注解类型,以满足特定需求。通过自定义注解,开发人员可以在代码中添加自定义的元数据、标记或指示,以便在编译时、运行时或使用特定工具时进行解析和处理。其中,自定义注解的规则包括:
(1)使用“@interface”关键字定义注解类型。注解的名称可以在与内置注解不冲突的情况下随意命名,但应该以大写字母开头,遵循标识符的命名规则。
(2)在注解中定义需要的属性。注解的属性是以方法的形式定义的,可以包含默认值,属性的类型可以是基本数据类型、字符串、枚举、Class对象或其他注解类型。
假定定义一个名为“MyAnnotation”的自定义注解,其代码如下:
4、反射,反射是基于Java虚拟机(JVM)在运行时获取类的元数据信息并进行动态操作。通过反射操作可以在代码运行时动态地获取和操作类、对象、方法、字段等程序元素。通过反射,还可以检查类的结构、调用对象的方法、访问和修改对象的字段,以及动态创建对象实例等。因此,反射的优点在于它提供了灵活性和动态性,可以在运行时根据需要获取和操作类的信息。
基于以上声明以及对专业术语的介绍,正如背景技术中所介绍的,虽然相关技术中提出了通过注解实现国际化,但实践过程中发现,现有相关技术存在国际化资源加载效率欠佳的问题。以Java为例,首先应理解的是,从Java字节码到对象实例化需要经过以下步骤:
(1)类加载,通过类加载器根据类的全限定名查找并加载对应的字节码文件。
(2)验证,在类加载过程中,Java虚拟机会对加载的字节码的字节码结构进行验证,确保其符合Java虚拟机规范和安全要求。
(3)准备,在准备阶段,Java虚拟机为类的静态变量分配内存空间,并设置默认的初始值,这些静态变量在类加载后会占据类的方法区。
(4)解析,在解析阶段,Java虚拟机将符号引用转换为直接引用,建立符号引用和方法区中实际内存位置之间的关联。该过程会涉及到对类、方法、字段等符号引用的处理。
(5)初始化,类的初始化是在首次使用该类的时候进行的。在类初始化阶段,Java虚拟机执行类的初始化代码,包括静态变量赋值和静态代码块的执行。
(6)对象实例化,在类加载和初始化完成后,可以通过关键字new来创建该类的对象实例。
目前的相关技术中,在对象实例化期间进行注解国际化,然而实践过程中发现,由于类的字节码完成类加载后,可以通过对象实例化重复生成多个对象,意味着没生成一个对象则需要进行一次注解国际化,而注解国际化又需要对注解进行解析,因而会严重降低对象实例化的效率。
基于上述技术问题的发现,发明人经过创造性劳动提出下述技术方案以解决或者改善上述问题。需要注意的是,以上现有技术中的方案所存在的缺陷,是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请实施例针对上述问题所提出的解决方案,都应该是发明人在发明创造过程中对本申请做出的贡献,而不应当理解为本领域技术人员所公知的技术内容。
鉴于上述问题,本实施例提供一种注解国际化方法。该方法中,电子设备若检测到类加载操作,则对类加载操作进行拦截,并判断类加载操作中的待加载类是否标记有指示国际化处理的预设类注解;若标记有指示国际化处理的预设类注解,则获取待加载类当前语言环境所需的国际化信息;根据国际化信息对待加载类进行国际化处理,获得目标加载类。如此,在类加载期间只需完成一次注解国际化,即可使得后续可以直接基于目标加载类生成对象,从而提高了注解国际化的效率。
本实施例中,该电子设备可以是,但不限于,移动终端、平板计算机、膝上型计算机、台式计算机以及服务台等。在一些实施例中,移动终端可以包括智能家居设备、可穿戴设备、智能移动设备、虚拟现实设备、或增强现实设备等,或其任意组合。该服务器可以是,但不限于,Web(网站)服务器、FTP(File Transfer Protocol,文件传输协议)服务器、数据处理服务器等。此外,该服务器可以是单个服务器,也可以是服务器组。服务器组可以是集中式的,也可以是分布式的(例如,服务器可以是分布式系统)。在一些实施例中,服务器相对于用户终端,可以是本地的、也可以是远程的。在一些实施例中,服务器可以在云平台上实现;仅作为示例,云平台可以包括私有云、公有云、混合云、社区云(Community Cloud)、分布式云、跨云(Inter-Cloud)、多云(Multi-Cloud)等,或者它们的任意组合。在一些实施例中,服务器可以在具有一个或多个组件的电子设备上实现。
为使本实施例提供的方案更加清楚,下面结合图1对该方法的各个步骤进行详细阐述。但应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。如图1所示,该方法包括:
S101,若检测到类加载操作,则对类加载操作进行拦截。
本实施例中,针对每种语言环境,均提供相匹配的国际化资源文件。在此步骤之前,该电子设备获取当前的语言环境;根据当前的语言环境,从多个国际化资源文件中选取与当前语言环境相匹配的国际化资源文件;并加载与当前语言环境相匹配的国际化资源文件。
示例性的,假定支持的语言环境包括中文、英文、日文等,并提供相应的交互界面供用户进行选择。假定当前的语言环境为中文,意味着此时加载到内存中的国际化资源文件与中文相匹配。当用户将当前语言环境切换为英文,则加载与英文相匹配的国际化资源文件,以替换与中文相匹配国际化资源文件。
本实施例中,将后缀名为“.properties”的文件(下文统称为properties文件)作为国际化资源文件。应理解的是,在Java中,Properties文件是一种常见的配置文件格式,用于存储键值对信息。在储键值对信息中,每个属性都由一个键和一个值组成,中间用等号(=)或冒号(:)分隔。例如,“username=Bob”、“password=123456”。其中,键值对中的“键”为国际化变量,键值对中的“值”为翻译文本。
示例性的,假定一个国际化变量为“i18nName”,与中文相匹配的国际化资源文件命名为“I18n-zh_CN.properties”,与英文相匹配的国际化资源文件命名为“I18n-en.properties”,则两者记载的内容如下:
I18n-zh_CN.properties:
i18nName=名称
I18n-en.properties:
i18nName=name
值得说明的是,上述命名中的“I18n”源于Internationalization一词I和N中间有18个字符,因此,将国际化简写为“I18n”。
本实施例中,为了对类加载操作进行拦截,通过反射机制检测检测是否有类加载操作,一旦检测到类加载操作,则对该类加载操作进行拦截。
结合上述实施例中对类加载操作的拦截说明,继续参见图1,该注解国际化方法还包括:
S102,判断类加载操作中的待加载类是否标记有指示国际化处理的预设类注解,若是,则执行步骤S103,若否,则执行步骤S106。
本实施例中,使用自定义注解作为指示国际化处理的预设类注解。示例性的,假定该预设类注解命名为“I18n”,并且该预设类注解为带参数的注解。如此,当需要对某个类进行注解国际化时,可以通过“@I18n”进行标记。例如:
该电子设备完成类加载操作的拦截后,若检测到被拦截的类加载操作中的待加载类标记有“@I18n”,则确定需要对当前的待加载类进行注解国际化处理。
结合上述实施例对预设类注解的介绍,继续参见图1,该注解国际化方法还包括:
S103,获取待加载类当前语言环境所需的国际化信息。
其中,国际化信息包括待加载类中国际化变量的翻译文本。如图2所示,作为步骤S103的可选实施方式,包括:
S103-1,获取待加载类的目标注解配置文件。
对此,应理解的是,当前在对象实例化期间进行注解国际化的方案中,往往针对特定业务流程、特定注解做国际化处理,不具备普遍适用基础。例如,需要在代码中明确声明国际化变量;然而,当业务逻辑发生变化时,产生了新的国际化变量,则需要对代码本身进行修改,以声明新的国际化变量。这就导致当前在对象实例化期间进行注解国际化的方案对业务侵入性过多,扩展性较差的问题。
鉴于此,本实施例还提供有针对待加载类配置有目标注解配置文件,使得开发人员只需在目标注解配置文件声明国际化变量即可,当需要修改时,也只需对目标注解配置文件进行修改,而无需对业务逻辑相关的代码进行修改。而目标注解配置文件的存储路径与待加载类的加载路径满足预设映射关系,因此,作为可选实施方式,该电子设备可以获取待加载类的类加载路径;根据类加载路径,获得目标注解配置文件的目标文件路径;在目标文件路径下获取目标注解配置文件。
其中,值得说明的是,目标注解配置文件的目标文件路径下可能包括有多个文件,因此,该电子设备可以获取预设类注解的注解属性值;根据注解属性值,确定目标注解配置文件的名称信息;根据名称信息,从目标文件路径下获取目标注解配置文件。
示例性的,继续以预设类注解“@I18n”为例。此处假定该预设类注解“@I18n”包括有注解属性“clazz”,开发人员可以对该注解属性赋予注解属性值,用于指示目标注解配置文件的名称信息。若预设类注解的注解属性值为“User.class”,则该预设类注解可以表示为“@I18n(clazz=User.class)”,其中,“clazz=User.class”表示对应目标注解配置文件的名称为“User.xxxxx”,其中,“User.xxxxx”中的“xxxxx”为后缀名,可以根据需要进行任意设置。例如,该目标注解配置文件完整的名称可是“User.annotation”,其中,“annotation”用于表示该文件为注解配置文件。当然,还可以使用其他字符串形式的后缀名来标记该文件为注解配置文件,本实施例对此不做具体限定。
假定待加载类的加载路径为“Com/xx/xx/xx/”,则电子设备根据目标注解配置文件的存储路径与待加载类的加载路径满足预设映射关系,在路径“Com/xx/xx/xx/”下匹配名称为“User.annotation”的文件,将匹配到的文件确定为与“clazz=User.class”对应的目标注解配置文件。
结合上述实施例对目标注解配置文件的介绍,如继续参见图2,步骤S103还包括:
S103-2,解析目标注解配置文件,得到待加载类中的国际化变量。
S103-3,根据与当前语言环境相匹配的国际化资源文件,从中获得国际化变量的翻译文本。
示例性的,继续结合上述国际化资源文件,并假定该目标注解文件中记载有以下内容:
Filed.name.Excel.name=i18nName
Filed.name.Excel.name=i18nSex
Method.import.ImportData.name=i18nNameImportName
上述目标注解文件中记载的内容,则意味着国际化变量“i18nName、i18nSex、i18nNameImportName”需要进行国际化处理。若当前的语言环境为中文,则与当前语言环境相匹配的国际化资源文件为“I18n-zh_CN.properties”。对于上述国际化变量“i18nName”为例,若国际化资源文件“I18n-zh_CN.properties”中记载了以下内容:
I18n-zh_CN.properties:
i18nName=名称
对于上述国际化资源文件中记载的内容,意味着需要将国际化变量“i18nName”在中文环境下的翻译文本为“名称”,因此,需要将其替换为“名称”。
结合上述实施例对国际化信息的介绍,继续参见图1,该注解国际化方法还包括:
S104,根据国际化信息对待加载类进行国际化处理,获得目标加载类。
S105,将目标加载类加载到内存中。
如此,在上述实施例中,通过对类加载操作进行拦截,并对标记有预设类注解的待加载类进行国际化处理,使得加载到内存中的目标加载类经过了国际化处理。并且,由于目标加载类经过了国际化处理,因此,可以通过目标加载类直接进行对象实例化,而无需每次对象实例化时再进行国际化处理,极大提高了对象实例化的效率。
继续参见图1,当待加载类中未标记为预设类注解,则意味着待加载类无需进行国际化处理,因此,该电子设备直接执行以下步骤:
S106,将待加载类加载到内存中。
基于与本实施例所提供的注解国际化方法相同的发明构思,本实施例还提供一种注解国际化装置。该注解国际化装置包括至少一个可以软件形式存储于存储器或固化在电子设备中的软件功能模块。电子设备中的处理器用于执行存储器中存储的可执行模块。例如,注解国际化装置所包括的软件功能模块及计算机程序等。请参照图3,从功能上划分,注解国际化装置可以包括:
拦截模块101,用于检测是否有类加载操作;若有类加载操作,则对类加载操作进行拦截,并判断待加载类是否标记有指示国际化处理的预设类注解;
国际模块102,用于若标记有指示国际化处理的预设类注解,则获取待加载类当前语言环境所需的国际化信息;
国际模块102,还用于根据国际化信息对待加载类进行国际化处理,获得目标加载类。
在本实施例中,上述拦截模块101用于实现图1中步骤S101、S102,该注解模块用于实现图1中的S103、S104、S105、S106,因此,关于上述各模块的详细描述可以参见对应步骤的具体实施方式,本实施不再进行赘述。此外,由于与本实施例提供的注解国际化方法相同的发明构思,因此,上述各模块还可以用于实现该方法的其他步骤或者子步骤。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
还应理解的是,以上实施方式如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
因此,本实施例还提供一种存储介质,该存储介质存储有计算机程序,该计算机程序被处理器执行时,实现本实施例提供的注解国际化方法。其中,该存储介质可以是U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
请参照图4,本实施例还提供的一种电子设备。该电子设备可包括处理器202及存储器201。并且,存储器201存储有计算机程序,处理器通过读取并执行存储器201中与以上实施方式对应的计算机程序,实现本实施例所提供的注解国际化方法。
继续参见图4,该电子设备还包括有通信单元203。该存储器201、处理器202以及通信单元203各元件相互之间通过系统总线204直接或间接地电性连接,以实现数据的传输或交互。
其中,该存储器201可以是基于任何电子、磁性、光学或其它物理原理的信息记录装置,用于记录执行指令、数据等。在一些实施方式中,该存储器201可以是,但不限于,易失存储器、非易失性存储器、存储驱动器等。
在一些实施方式中,该易失存储器可以是随机存取存储器(Random AccessMemory,RAM);在一些实施方式中,该非易失性存储器可以是只读存储器(Read OnlyMemory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)、闪存等;在一些实施方式中,该存储驱动器可以是磁盘驱动器、固态硬盘、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合等。
该通信单元203用于通过网络收发数据。在一些实施方式中,该网络可以包括有线网络、无线网络、光纤网络、远程通信网络、内联网、因特网、局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)、无线局域网(Wireless Local Area Networks,WLAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、公共电话交换网(Public Switched Telephone Network,PSTN)、蓝牙网络、ZigBee网络、或近场通信(Near Field Communication,NFC)网络等,或其任意组合。在一些实施例中,网络可以包括一个或多个网络接入点。例如,网络可以包括有线或无线网络接入点,例如基站和/或网络交换节点,服务请求处理系统的一个或多个组件可以通过该接入点连接到网络以交换数据和/或信息。
该处理器202可能是一种集成电路芯片,具有信号的处理能力,并且,该处理器可以包括一个或多个处理核(例如,单核处理器或多核处理器)。仅作为举例,上述处理器可以包括中央处理单元(Central Processing Unit,CPU)、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、专用指令集处理器(Application SpecificInstruction-set Processor,ASIP)、图形处理单元(Graphics Processing Unit,GPU)、物理处理单元(Physics Processing Unit,PPU)、数字信号处理器(Digital SignalProcessor,DSP)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、可编程逻辑器件(Programmable Logic Device,PLD)、控制器、微控制器单元、简化指令集计算机(Reduced Instruction Set Computing,RISC)、或微处理器等,或其任意组合。
可以理解,图4所示的结构仅为示意。电子设备还可以具有比图4所示更多或者更少的组件,或者具有与图4所示不同的配置。图4所示的各组件可以采用硬件、软件或其组合实现。
应该理解到的是,在上述实施方式中所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上所述,仅为本申请的各种实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种注解国际化方法,其特征在于,所述方法包括:
若检测到类加载操作,则对所述类加载操作进行拦截,并判断所述类加载操作中的待加载类是否标记有指示国际化处理的预设类注解;
若标记有所述指示国际化处理的预设类注解,则获取所述待加载类当前语言环境所需的国际化信息;
根据所述国际化信息对所述待加载类进行国际化处理,获得目标加载类。
2.根据权利要求1所述的注解国际化方法,其特征在于,所述国际化信息包括所述待加载类中国际化变量的翻译文本,所述获取所述待加载类当前语言环境所需的国际化信息,包括:
获取所述待加载类的目标注解配置文件;
解析所述目标注解配置文件,得到所述待加载类中的国际化变量;
根据与当前语言环境相匹配的国际化资源文件,从中获得所述国际化变量的翻译文本。
3.根据权利要求2所述的注解国际化方法,其特征在于,所述获取所述待加载类的目标注解配置文件,包括:
获取所述待加载类的类加载路径;
根据所述类加载路径,获得所述目标注解配置文件的目标文件路径,其中,所述类加载路径与所述目标注解配置文件的目标文件路径满足预设映射关系;
在所述目标文件路径下获取所述目标注解配置文件。
4.根据权利要求3所述的注解国际化方法,其特征在于,所述在所述目标文件路径下获取所述目标注解配置文件,包括:
获取所述预设类注解的注解属性值;
根据所述注解属性值,确定所述目标注解配置文件的名称信息;
根据所述名称信息,从所述目标文件路径下获取所述目标注解配置文件。
5.根据权利要求1或2所述的注解国际化方法,其特征在于,在所述若检测到类加载操作,则对所述类加载操作进行拦截之前,所述方法还包括:
获取当前的语言环境;
根据所述当前的语言环境,从多个国际化资源文件中选取与当前语言环境相匹配的国际化资源文件;
加载与当前语言环境相匹配的国际化资源文件。
6.根据权利要求1所述的注解国际化方法,其特征在于,所述方法还包括:
将所述目标加载类加载到内存中。
7.根据权利要求1所述的注解国际化方法,其特征在于,通过反射机制检测所述类加载操作。
8.一种注解国际化装置,其特征在于,所述装置包括:
拦截模块,用于若检测到类加载操作,则对所述类加载操作进行拦截,并判断所述类加载操作中的待加载类是否标记有指示国际化处理的预设类注解;
国际模块,用于若标记有指示国际化处理的预设类注解,则获取所述待加载类当前语言环境所需的国际化信息;
所述国际模块,还用于根据所述国际化信息对所述待加载类进行国际化处理,获得目标加载类。
9.一种存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1-7任一项所述的注解国际化方法。
10.一种电子设备,其特征在于,所述电子设备包括处理器以及存储器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1-7任一项所述的注解国际化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311297990.5A CN117555609A (zh) | 2023-10-08 | 2023-10-08 | 注解国际化方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311297990.5A CN117555609A (zh) | 2023-10-08 | 2023-10-08 | 注解国际化方法、装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117555609A true CN117555609A (zh) | 2024-02-13 |
Family
ID=89813573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311297990.5A Pending CN117555609A (zh) | 2023-10-08 | 2023-10-08 | 注解国际化方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117555609A (zh) |
-
2023
- 2023-10-08 CN CN202311297990.5A patent/CN117555609A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6457594B2 (ja) | 変換コンテンツ・アウェア・データー・ソース管理 | |
US10152309B2 (en) | Cross-library framework architecture feature sets | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
US8850581B2 (en) | Identification of malware detection signature candidate code | |
US9524175B2 (en) | Target typing of overloaded method and constructor arguments | |
CN110704064B (zh) | 编译和执行智能合约的方法及装置 | |
US10635420B2 (en) | Overriding a migrated method in an updated type | |
CN110688122B (zh) | 编译和执行智能合约的方法及装置 | |
TW201308209A (zh) | 運行時間系統 | |
US11048885B2 (en) | Cognitive translation service integrated with context-sensitive derivations for determining program-integrated information relationships | |
US9372683B2 (en) | Automatic generation of class identifiers from source code annotations | |
US10303449B2 (en) | Compiling non-native constants | |
WO2024045382A1 (zh) | 区块链中实现反射机制 | |
US10296313B2 (en) | Safely consuming dynamically-typed code from a statically-typed programming language | |
US20140325492A1 (en) | Selective speculative class-based optimization | |
CN111324396A (zh) | 一种区块链智能合约执行方法、装置及设备 | |
US20140068573A1 (en) | Error-code and exception-based function dispatch tables | |
Hinsen | A data and code model for reproducible research and executable papers | |
WO2021175053A1 (zh) | 一种在虚拟机中执行功能模块的方法和装置 | |
US20190050212A1 (en) | Technologies for indirectly calling vector functions | |
CN114830099A (zh) | 集成引用和次对象的标记 | |
Mäkitalo et al. | Bringing webassembly up to speed with dynamic linking | |
US20140068552A1 (en) | Infrastructure for automatically generating boilerplate code using annotations and code-generators | |
US9135027B1 (en) | Code generation and execution for dynamic programming languages | |
CN117555609A (zh) | 注解国际化方法、装置、存储介质及电子设备 |
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 |